카테고리 없음

★기본자료형 형변환과 Parsing, 클래스 형변환다형성

열하나요 2023. 10. 23. 20:21

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 처럼 쓸 수 있음