Java에서 연말 날짜를 YYYY로 출력했더니 다음 해가 됐다
Java 날짜 출력에서 YYYY는 주차 기준 연도다. 미국·영국 Locale의 연말·연초 고정 날짜를 비교하고, 날짜 키에는 ISO_LOCAL_DATE·uuuu를, 주차 키에는 주차 연도와 번호를 선택하는 기준을 설명한다.
빌드노트
Java·JVM 카테고리의 글입니다.
총 48개의 글
Java 날짜 출력에서 YYYY는 주차 기준 연도다. 미국·영국 Locale의 연말·연초 고정 날짜를 비교하고, 날짜 키에는 ISO_LOCAL_DATE·uuuu를, 주차 키에는 주차 연도와 번호를 선택하는 기준을 설명한다.
int 두 값의 곱은 long에 대입하기 전에 이미 넘칠 수 있다. 곱셈 뒤 캐스트와 곱셈 전 승격의 실제 출력, 작은 값과 경계값을 비교하고 Math.multiplyExact의 int·long 반환 타입에 따라 허용할 결과 범위를 고르는 방법을 설명한다.
new BigDecimal(0.1)은 이미 근사된 double을 정확한 십진수로 옮긴다. 문자열 생성자와 valueOf의 출력·덧셈을 비교하고, double에서 먼저 계산한 0.1 + 0.2는 valueOf로도 원래 십진 입력을 복원하지 못함을 실제 JDK 실행으로 확인한다.
Boolean.getBoolean은 문자열 값이 아니라 JVM 시스템 속성 이름을 받는다. 속성 없음과 -Dlab.flag=true/false를 별도 JVM에서 비교하고, parseBoolean으로 바꿀 경우와 속성 원문을 확인할 경우를 구분한다.
HashMap이 null 키를 받아도 groupingBy의 분류 함수가 null을 반환하면 NPE가 날 수 있다. OpenJDK 17.0.2에서 Map 공급자를 바꾼 결과를 비교하고, Optional 그룹은 3행을 보존하며 명시 필터는 1행을 제외하는 차이를 확인한다.
reduce의 identity에는 덧셈의 중립 원소 0을 넣어야 한다. 작은 목록에서 순차·병렬 실행과 빈 입력을 비교하고, 합계 보정값 10을 환원 뒤 한 번 적용하는 수정과 실제 오답이 실행 조건에 따라 달라지는 이유를 설명한다.
read 반환값 n보다 뒤의 버퍼 원소는 이번 입력이 아니다. ABCDE를 최대 두 바이트씩 반환한 관찰로 잔여 값을 확인하고, n만 소비하는 루프와 readNBytes 뒤의 입력 부족 검사를 선택한다.
Java Comparator 체인 끝의 reversed()는 그룹과 점수 기준을 함께 뒤집는다. 같은 네 항목의 정렬 결과와 compare 부호를 비교해, 그룹 순서는 유지하고 보조 점수만 내림차순으로 만드는 위치를 확인한다.
strip() 뒤에도 U+00A0(NBSP)가 남는 이유를 JShell에서 일반 공백·탭과 비교한다. 양끝 코드 포인트와 isWhitespace·isSpaceChar의 차이를 확인하고, 필드 규약에 지정한 문자만 양끝에서 제거하거나 입력을 거부하는 기준을 설명한다.
count()가 정상 반환해도 peek()는 생략될 수 있다. 호출 카운터로 로그 설정 문제와 구별하고, 필터 위치에 따른 실제 차이와 결과 목록 뒤 명시적 반복으로 필수 처리를 옮기는 방법을 확인한다.
Files.readString으로 읽은 첫 헤더에 UTF-8 BOM이 U+FEFF로 남는 경우를 바이트·코드 포인트·길이·equals로 확인한다. trim·strip의 결과와 입력 시작에서만 표식 하나를 제거할 조건, 중간 U+FEFF를 보존할 이유를 실제 파일 비교로 설명한다.
같은 값의 별도 배열에서 equals가 실패하는 이유를 짧은 JShell 입력으로 확인한다. 일차원 int 배열은 Arrays.equals, 중첩 배열은 Arrays.deepEquals로 비교할 기준과 적용 범위를 설명한다.