본문 바로가기
빌드노트 검색

빌드노트

Java·JVM

Java·JVM 카테고리의 글입니다.

글 검색

글 목록

총 48개의 글

  1. Java에서 연말 날짜를 YYYY로 출력했더니 다음 해가 됐다

    Java 날짜 출력에서 YYYY는 주차 기준 연도다. 미국·영국 Locale의 연말·연초 고정 날짜를 비교하고, 날짜 키에는 ISO_LOCAL_DATE·uuuu를, 주차 키에는 주차 연도와 번호를 선택하는 기준을 설명한다.

  2. long에 넣었는데 int 곱셈 결과가 음수다

    int 두 값의 곱은 long에 대입하기 전에 이미 넘칠 수 있다. 곱셈 뒤 캐스트와 곱셈 전 승격의 실제 출력, 작은 값과 경계값을 비교하고 Math.multiplyExact의 int·long 반환 타입에 따라 허용할 결과 범위를 고르는 방법을 설명한다.

  3. BigDecimal에 0.1을 넣었는데 긴 소수가 나오는 이유

    new BigDecimal(0.1)은 이미 근사된 double을 정확한 십진수로 옮긴다. 문자열 생성자와 valueOf의 출력·덧셈을 비교하고, double에서 먼저 계산한 0.1 + 0.2는 valueOf로도 원래 십진 입력을 복원하지 못함을 실제 JDK 실행으로 확인한다.

  4. Boolean.getBoolean("true")가 false를 반환할 때

    Boolean.getBoolean은 문자열 값이 아니라 JVM 시스템 속성 이름을 받는다. 속성 없음과 -Dlab.flag=true/false를 별도 JVM에서 비교하고, parseBoolean으로 바꿀 경우와 속성 원문을 확인할 경우를 구분한다.

  5. HashMap은 null 키를 받는데 groupingBy는 NPE가 난다

    HashMap이 null 키를 받아도 groupingBy의 분류 함수가 null을 반환하면 NPE가 날 수 있다. OpenJDK 17.0.2에서 Map 공급자를 바꾼 결과를 비교하고, Optional 그룹은 3행을 보존하며 명시 필터는 1행을 제외하는 차이를 확인한다.

  6. parallelStream의 reduce(10, sum)는 왜 합계가 더 커질까

    reduce의 identity에는 덧셈의 중립 원소 0을 넣어야 한다. 작은 목록에서 순차·병렬 실행과 빈 입력을 비교하고, 합계 보정값 10을 환원 뒤 한 번 적용하는 수정과 실제 오답이 실행 조건에 따라 달라지는 이유를 설명한다.

  7. InputStream.read가 양수여도 버퍼 전체를 처리하면 안 된다

    read 반환값 n보다 뒤의 버퍼 원소는 이번 입력이 아니다. ABCDE를 최대 두 바이트씩 반환한 관찰로 잔여 값을 확인하고, n만 소비하는 루프와 readNBytes 뒤의 입력 부족 검사를 선택한다.

  8. Java Comparator의 reversed()를 끝에 붙이면 그룹 순서도 뒤집힌다

    Java Comparator 체인 끝의 reversed()는 그룹과 점수 기준을 함께 뒤집는다. 같은 네 항목의 정렬 결과와 compare 부호를 비교해, 그룹 순서는 유지하고 보조 점수만 내림차순으로 만드는 위치를 확인한다.

  9. Java strip()을 했는데 복사한 문자열의 공백이 남는다

    strip() 뒤에도 U+00A0(NBSP)가 남는 이유를 JShell에서 일반 공백·탭과 비교한다. 양끝 코드 포인트와 isWhitespace·isSpaceChar의 차이를 확인하고, 필드 규약에 지정한 문자만 양끝에서 제거하거나 입력을 거부하는 기준을 설명한다.

  10. Stream의 count()는 값을 반환했는데 peek() 로그가 없다

    count()가 정상 반환해도 peek()는 생략될 수 있다. 호출 카운터로 로그 설정 문제와 구별하고, 필터 위치에 따른 실제 차이와 결과 목록 뒤 명시적 반복으로 필수 처리를 옮기는 방법을 확인한다.

  11. UTF-8로 읽었는데 첫 번째 열 이름만 일치하지 않는다

    Files.readString으로 읽은 첫 헤더에 UTF-8 BOM이 U+FEFF로 남는 경우를 바이트·코드 포인트·길이·equals로 확인한다. trim·strip의 결과와 입력 시작에서만 표식 하나를 제거할 조건, 중간 U+FEFF를 보존할 이유를 실제 파일 비교로 설명한다.

  12. 같은 값이 든 Java 배열인데 equals가 false다

    같은 값의 별도 배열에서 equals가 실패하는 이유를 짧은 JShell 입력으로 확인한다. 일차원 int 배열은 Arrays.equals, 중첩 배열은 Arrays.deepEquals로 비교할 기준과 적용 범위를 설명한다.