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

빌드노트

Java·JVM

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

글 검색

글 목록

총 48개의 글

  1. List<Integer>에서 숫자 1 대신 두 번째 값이 지워지는 이유

    List<Integer>의 remove(1)은 인덱스 1의 원소를 지운다. 수정 가능한 ArrayList에서 값 삭제와 반환값·목록을 비교하고, 없는 값의 false와 잘못된 인덱스의 예외를 구별해 호출 의도를 명시한다.

  2. ByteBuffer에 쓴 값 대신 0이 읽히는 이유

    ByteBuffer에 값을 넣은 뒤 엉뚱한 영역을 읽는 이유를 position·limit·remaining으로 확인한다. 작은 heap 버퍼와 메모리 채널의 실제 비교로 flip, clear, rewind의 선택 기준과 내용 보존을 설명한다.

  3. toMap에 같은 ID를 넣었더니 IllegalStateException이 난다

    Collectors.toMap은 같은 ID가 다시 나오면 값을 덮어쓰지 않고 예외를 던진다. JShell에서 정상·중복 입력을 비교하고, 수량 합산은 병합 함수로, 원본 행 보존은 groupingBy로 선택하는 기준을 확인한다.

  4. unmodifiableList로 감쌌는데 원본 변경이 보인다

    unmodifiableList는 원본 변경이 보이는 읽기 전용 뷰다. 짧은 JShell 예제로 원본 add·set과 뷰의 수정 거부를 비교하고, List.copyOf가 보존하는 원소 구성과 공유되는 원소 상태를 구별한다.

  5. 파일 처리 오류 대신 close() 오류만 보이면 finally를 확인한다

    파일 처리와 close()가 함께 실패하면 수동 finally는 정리 오류만 전달할 수 있다. 짧은 코드와 실제 primary·suppressed 출력을 비교해 try-with-resources로 바꿀 위치와 예외 객체를 보존하는 로깅 방식을 판단한다.

  6. HashMap의 getOrDefault가 기본값 대신 null을 반환한다

    HashMap의 getOrDefault는 키가 없을 때만 기본값을 반환한다. 짧은 JShell 입력으로 키 부재와 null 매핑을 구분하고, 저장된 null도 기본값으로 바꿀지 결정한다.

  7. Optional에 값이 있는데 orElse의 기본값 함수가 실행된다

    Optional에 값이 있어도 orElse의 인자로 쓴 함수는 먼저 실행된다. 실제 호출 횟수·반환값·예외를 비교해 orElseGet의 람다 안으로 옮길 작업을 구분하고, 미리 계산한 값을 감싸는 함정을 확인한다.

  8. Arrays.asList에서 set은 되는데 add·remove는 실패하는 이유

    Arrays.asList는 원본 배열과 연결된 고정 크기 뷰라서 set은 되지만 원소 추가·삭제는 실패한다. 실제 Java 출력으로 양방향 연결과 ArrayList 복사 뒤의 크기 변경·연결 해제를 비교하고 List.of와의 차이를 설명한다.

  9. Path.resolve에 절대 경로를 넣으면 기준 경로가 사라진다

    Path.resolve는 절대 입력을 받으면 기준 경로 대신 입력을 반환한다. Windows 11·OpenJDK 17.0.2에서 상대·절대·루트 입력을 비교하고, 상대 경로만 허용하는 검사와 normalize의 한계를 설명한다.

  10. BigDecimal.divide가 1/3에서 예외를 내는 이유

    문자열로 정확히 만든 BigDecimal도 1/3의 정확한 몫은 담을 수 없다. JShell에서 1/2와 1/3을 비교하고, 10/3으로 scale 2와 precision 2의 차이를 확인한다. UNNECESSARY와 0으로 나누기의 실패도 구별한다.

  11. int 배열을 Stream.of에 넣었는데 count()가 1이다

    Stream.of(int[])는 배열 한 개를 담는 Stream<int[]>를 만든다. 같은 세 값으로 원소 수·요소 타입·합계와 Integer[]의 차이를 직접 비교하고, 숫자별 연산에는 Arrays.stream을, Integer 스트림이 필요할 때는 boxed()를 선택한다.

  12. Math.abs를 호출해도 Integer.MIN_VALUE는 음수다

    Math.abs(int)는 Integer.MIN_VALUE에서 같은 음수를 반환한다. JShell로 호출 전후의 long 변환과 absExact를 비교하고, 결과 범위를 넓힐지 int 범위 초과를 거부할지 고른다.