☕ Java

부동 소수점 리터럴의 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가 연속될 때 생기는 공백
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, , ]의 공백들은 후행 빈 문자열로 삭제되기 때문에 결과가 이렇게 출력된다.