튜터님의 설명을 들으면서
int와 Integer
boolean 과 Boolean의 차이가 뭘까?
의문이 생겼다.
일단 int
와 boolean
은
byte
, char
, short
, long
, float
, double
해서 총 8개가 있다.public class Main {
public static void main(String[] args) {
int i = null;
System.out.println(i); //에러발생
}
}
error: incompatible types: <nulltype> cannot be converted to int : int는 nulltype과 양립불가능 하다.
그럼 Integer
와 Boolean
은
: 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스
기본형 | Wapper class |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니므로,
인스턴스에 저장된 값을 변경할 수 없다.
단지, 값을 참조하기 위해 새로운 인스턴스를 생성하고,
생성된 인스턴스의 값만을 참조할 수 있다.
public class Main {
public static void main(String[] args) {
Integer num1 = new Integer(7); //박싱
Integer num2 = 2; //오토박싱
Integer num3 = 7;
int int1 = num1.intValue(); //언박싱
int int2 = num2; //오토언박싱
Integer result1 = num1 + num2;
Integer result2 = int1 - int2;
int result3 = num1 * int2;
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
System.out.println(num1 > num2); //true
System.out.println(num1 == num3); //false
System.out.println(num1.equals(num3)); //true
System.out.println(System.identityHashCode(num1)); //705927765
System.out.println(System.identityHashCode(num3)); //366712642
}
}
오토 박싱/언박싱: 자바컴파일러가 자동으로 박싱/언박싱 처리해줌.
비교연산도 가능하지만
==
동등연산자를 사용하면 두 인스턴스의 값을 비교하는 것이 아니라 두 인스턴스의 주소값을 비교하게 된다.false
반환인스턴스에 저장된 값의 동등 여부를 정확히 판단하려면
.equals()
메소드 사용System.identityHashCode()
: 주소값 확인 메소드
🧐reference
Wrapper 클래스
[Java]기본형(primitive type)과 참조형(reference type) (feat.Integer와 int 차이점)