☕ Java

    부동 소수점 리터럴의 default, 부동 소수점 데이터 타입은 부정확하다?, 정확하게 BigDecimal()

    부동 소수점 리터럴의 default, 부동 소수점 데이터 타입은 부정확하다?, 정확하게 BigDecimal()

    부동 소수점 리터럴의 default 값은 double float 리터럴을 만들 때 값의 뒤에 부동 소수점 접미어인 F를 붙여주지 않으면 에러가 발생한다. 8byte인 double 타입을 4byte인 float 타입에 담으려고 했기 때문. float f = 12.3456; // 값을 default인 double로 인식, 에러 float f = 12.3456F; // 부동 소수점 접미어 F를 붙인 값 부동 소수점 데이터 타입은 정확하지 않다? 34.56789876 + 34.2234 의 값은 68.791229876이지만 java로 확인해보면 0.000000001이 부족한 68.79129875999999이 출력되는 것을 확인할 수 있다. 자바는 IEEE 754 부동 소수점 방식을 사용한다. 그래서 정확한 실수를..

    중첩 반복문 안에서 break로 원하는 반복문 탈출하기(레이블 지정문) (+ continue)

    첫번째레이블명: for () { 두번째레이블명: for () { 세번째레이블명: for () { break 첫번째레이블명; // 첫번째레이블명을 가진 반복문 종료, 탈출. } } } // break 첫번째레이블명; 사용 후 나오게 되는 위치.

    8진수, 16진수, long 타입과 명시적 형변환 / 묵시적 형변환, 기본형의 확대 변환 (widening primitive conversion), 기본형의 축소 변환 (narrowing primitive conversion)

    8진수 (0 ~ 7) 0으로 시작하여 숫자를 입력하면 8진수가 된다. int i = 010; // 8; 16진수 (0 ~ 9, A(10) ~ F(15)) 0x로 시작하여 숫자를 입력하면 16진수가 된다. int i = 0xF; // 15 long의 정수 접미어 모든 정수 유형의 리터럴들은 default로 int 유형을 가지기 때문에 long 리터럴을 만들 때 값의 뒤에 정수 접미어인 L을 붙여주지 않으면 에러가 발생한다. 소문자 l은 1과 혼동하기 쉽기 때문에 대문자 L을 사용하는 것이 좋다. long l = 9223372036854775807; // 값을 default인 int로 인식, 에러 발생 long l = 9223372036854775807L; // 정수 접미어 L을 붙인 값 명시적 형변환 (E..

    split()의 separator가 연속될 때 생기는 공백

    split()의 separator가 연속될 때 생기는 공백

    String a = "boo:and:foo"; String[] arr = a.split("o"); System.out.println(Arrays.toString(arr)); 이대로 실행하면 공백이 나오는 것이다. 내 예상으로 boo:and:foo는 b, :and:f라고 생각했었는데 뜬금포로 공백이 나오니 너무 궁금해서 왜 나오는지 한참 찾아봤는데 split() 메서드는 separator를 기준으로 좌우로 갈라진다. separator끼리 좌우로 갈라지면 사이에는 공백이 생기게 된다. 또 파라미터가 0인 경우에는 후행 빈 문자열은 삭제가 된다.foo는 [f, , ]의 공백들은 후행 빈 문자열로 삭제되기 때문에 결과가 이렇게 출력된다.