이것이 자바다 정리 #1 참조 타입 (Reference Type)
이것이 자바다 책을 참고하였습니다.
primitive type
)reference type
)JVM은 운영체제에서 Runtime Data Area
메모리 영역을 할당받아 다음과 같이 세부 영역으로 구분해서 사용한다.
main
쓰레드만 존재하며, JVM 스택 영역도 1개이다.push
)하고 메소드가 종료되면 해당 프레임을 제거(pop
)한다.printStackTrace()
메소드는 이 스택 영역을 기준으로 프레임을 출력한다.push
) 되고 제거(pop
) 된다.push
)된다.pop
)나간다.int a = 1;
if ( a == 1 ) {
int b = 1;
int c = 1;
} // b와 c는 블록이 끝나면서 `pop`된다.
int d = 1;
==
, !=
연산은 값이 같은지 다른지 확인한다.==
, !=
연산읜 참조하는 주소의 값이 같은지 다른지 확인한다.null
을 갖는다.null
을 갖는 참조 타입 변수도 초기화되었다고 생각하기 때문에 스택 영역에 올라간다.null
을 가진 참조 타입 변수를 이용하려고 하면, NullPointerException
이 발생한다.String
은 참조 타입 변수다.new String()
과 같이 새로운 객체를 생성한 경우에는 다른 주소를 참조한다.String
끼리의 내용을 비교할 때는 .equals()
메소드를 쓰는게 정확하다.int[] array1;
int array1[];
[]
)나 변수명 옆에 대괄호([]
) 어느 방식으로도 가능하다.null
을 참조하여 초기화될 수 있다.int[] a = {1, 2, 3};
int b[] = new int[] {1, 2, 3};
int[] c = new int[] {1, 2, 3};
int d[];
d = new int[] {1, 2, 3};
위 코드 중
a
의 경우가 특별한데, 배열 생성 후 즉시 초기화 할 때만 문법에서new int[]
가 생략된다고 이해하면 쉽다.
byte[]
: 0
char[]
: \u0000
short[]
: 0
int[]
: 0
long[]
: 0L
float[]
: 0.0F
double[]
: 0.0
boolean[]
: false
클래스[]
: null
인터페이스[]
: null
배열변수.length
int[][] scores = new int[2][3];
2
개의 트리에 3
개의 자식트리가 각각 달리니 2*3
만큼의 공간이 생긴다.int stair = new int[2][];
stair[0] = new int[2];
stair[1] = new int[3];
stair[0]
에는 2
개의 공간이 연결된 반면에 stair[1]
에는 3
개의 공간이 연결되어 있다.System.arraycopy()
메소드를 이용해 주로 복사한다.for
문 처럼 카운터 변수(i
)와 증감식(i++
)을 사용하지 않는 형태이다.int[] scores = {95, 71, 84, 93, 87};
int sum = 0;
for (int score : scores) {
sum += score;
}
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
...
}
_
)로 구분한다.MONDAY_MORNING
, LOGIN_SUCCESS
Week today = Week.SUNDAY;
name()
메소드Week today = WEEK.SUNDAY;
today.name(); // "SUNDAY"
ordinal()
메소드Week monday = WEEK.MONDAY;
Week sunday = WEEK.SUNDAY;
monday.ordinal(); // 0, 첫번째 열거 상수
sunday.oridnal(); // 6, 마지막 열거 상수
compareTo()
메소드Week monday = WEEK.MONDAY;
Week wednesday = WEEK.WEDNESDAY;
monday.compareTo(wednesday); // -2
wednesday.compareTo(monday); // 2
values()
메소드Week[] days = Week.values();
for (Week day : days) {
System.out.println(day); // MONDAY, TUESDAY ...
}