class Sample {
public int num = 0;
...
}
private static Sample sp = new Sample();
sp = new Sample(); // final로 선언된 변수 변경 불가
sp.num = 10; // 클래스의 변수 변경 가능
리터럴
리터럴은 변하지 않는 직접 입력된 데이터, 즉시 값(immediate value)이라고 한다.
아래의 예시와 같이 100L, 1.5F, 1.5D와 같은 값을 리터럴이라고 한다.
Long l = 100L;
Float f = 1.5F;
Double d = 1.5D;
String s = "가";
char c = 'A';
boolean b = true;
char, int형을 제외하고 나머지 자료형은 각 자료형의 첫 글자를 대문자로 바꾸면 클래스가 된다.
래퍼 클래스 (Wrapper Class) 상속 관계도
Boolean, Character 클래스를 제외한 래퍼 클래스는 Number라는 상위 클래스와 상속 관계에 있다.
Boxing과 UnBoxing
JDK 1.5 이전에는 기본형과 래퍼 클래스 간 연산이 불가능하였다.
현재는 컴파일러가 intValue와 같은 메서드를 붙여 기본형과 래퍼 클래스 간의 연산이 가능해졌다.
// JDK 1.5 이전
int i = 5;
Interger j = 5;
i+j; //에러 발생
//JDK 1.5 이후
int i = 5;
Integer j = 5;
i+j.intValue(); //intValue()로 자료형 int를 받아 연상
Boxing & UnBoxing
Boxing : 기본형을 래퍼 클래스로 변환하는 것을 의미한다.
UnBoxing :
래퍼 클래스를 기본형으로 변환하는 것을 의미한다.
Integer i = new Integer(100); // Boxing
int j = i.intValue(); // UnBoxing
Auto Boxing & Auto UnBoxing
Integer i = 17; // Auto Boxing
int j = i; // Auto UnBoxing
Boxing & UnBoxing Compile 비교
// 컴파일 전
Integer int = (Integer) x;
Object o = (Object) x;
Long l = 100L;
// 컴파일 후
Integer int = Integer.valueOf(x);
Object o = (Object) Integer.valueOf(x);
Long l = new Long(100L);
기본형과 참조형의 비교
Integer num1 = new Integer(100);
Integer num2 = new Integer(100);
int num3 = 100;
num1 == num2; // 참조형과 참조형 비교 false
num1 == num3; // 참조형과 기본형 비교 true
num1.equals(num3) // equals를 이용한 참조형과 기본형 비교 true;