1. 기본자료형 형변환
작은 크기의 자료형 -> 큰 크기의 자료형 => 자동형변환
반대의 경우 => 강제형변환(명시적형변환)
여기서 크기는 byte(1), boolean(1), short(2), char(2), int(4), long(8), float(4), double(8)
특이사항
※ long은 float보다 크지만, float가 표현할 수 있는 범위가 넓기 때문에 long에서 float로 형변환 시 자동형변환된다.
※ CPU가 처리하는 기본 크기가 int형 4byte이다!
※ char와 int는 서로 자동형변환 된다.
=> 아스키코드에 따라 A는 65, a는 97이다. (문자 '0'은 48)
=> 그래서 문자와 int형 정수 간 연산이 가능하다.
(문자는 꼭 '작은 따옴표'를 사용한다. "큰 따옴표"는 문자열로 인식한다. => 'a' + 2 == 99, "a" + 2 == "a2")
2. Wrapper 클래스 parsing
int형을 Integer로 : 자동으로 됨 Integer i = 4;
Integer를 int형으로 : new Integer(숫자로 된 문자열이나 정수 값).intValue(); => 자바1.4버전 이상부터 intValue()는 생략가능
Integer를 String으로 : new Integer("123") 값이 숫자로된 문자열만 됨 (아니면 NumberFormatException)
String을 Integer로 : 못함
int형을 String으로 : String.valueOf(숫자);
String을 int형으로 : Integer.parseInt("123") 값이 숫자로된 문자열만 됨 (아니면 NumberFormatException)
3. 클래스 형변환 (상속구조일 때만 가능)
다형성 적용
자식요소를 부모요소로 형변환 : Up Casting => 자동형변환 Parent p = new Child();
부모요소를 자식요소로 형변환 : Down Casting => 강제형변환 Child c = (Child)new Parent();
+ Object와 클래스
클래스를 Object로 : 자동형변환(Object는 모든 클래스의 최고 조상클래스)
Object를 String으로 : 강제형변환 => Obejct의 값이 문자열인 경우에만 강제로 형변환 가능
Object를 int로 바꾸기
만약에 "123"이면 String으로 먼저 바꿔야 되고, => Integer.parseInt((String)Object);
123이면 Integer로 먼저 바꿔야 함 => ((Integer)Object).intValue();
(int)Object 이게 어떻게 가능하지?
원래
(String)Object하고 => 강제형변환 (Object가 String의 상위객체)
Integer.parseInt((String)Object) => String을 int형으로 parsing
해줘야 하는거 아닌가?
=> 자바 7버전 이상이면 가능하다고 함 ㅎㅎ (물론 Obejct가 정수일 때만 가능)
추가적으로 알게 된 것들
list.forEach(each -> each.메소드명());
=> 각각의 리스트 인덱스에 접근해 메소드를 불러온다
특정값 instanceof 클래스명 : 현재 레퍼런스가 실질적으로 어떤 클래스 타입을 참조하고 있는지 확인할 때 사용 => true, false로 반환
list.get(0) instanceof JavaLecture 나 arr[i] instanceof Child 처럼 쓸 수 있음