※ 기본 자료형은 변수명(식별자)와 값 모두 Stack에 저장
※ 기본 메모리는 Stack 영역에 메모리 할당
※ 리터럴은 StringPool에서 관리
ex) String s1 = "Java"
: 힙 안에 StringPool에 "Java"가 저장되며 s1이 그곳을 참조
c.f. String s2 = new String("Java")
: String 객체가 Heap에 생성 되며 s2가 그곳을 참조
이때 String s3 = "Java"
라고 한다면 s1과 s3는 같은 같은(StringPool내 같은) 곳을 가리킨다
➡ s1 == s3
: true | s1 == s2
: false | s2.equals(s1)
: true ※ equals() : 값의 비교
참조변수의
==
!=
- 참조변수의
==
!=
는 값이 같은지 비교하는 것이 아니라 동일한 객체를 참조하는지 확인
null
: 참조하는 객체가 없음을 나타내는 상태 String fruit = "사과";
int total = 10;
int eat = 3;
System.out.println(total + "개의 " + fruit + "중에서 " + eat + "개를 먹었다.");
// 템플릿 문자열
System.out.printf("%d개의 %s 중에서 %d개를 먹었다.%n", total, fruit, eat);
// 현재 이자율은 1.2% 입니다.
float rate = 1.2f;
String str = String.format("현재 이자율은 %.2f%% 입니다.", rate);
System.out.println(str);
public enum 열거타입명 { 열거 상수, ... }
RESULT_SUCCESS
실습
열거(enum) 생성
- Enum Type 소스코드 생성
패키지의 새로만들기 중 Enum 선택 후 이름 지정- Enum 구현
- Enum 객체를 불러와 사용
- 동일한 자료 유형의 여러 값들로 이루어진 객체(Object)
- new
로 생성되는 참조 자료형
타입[] 변수;
타입 변수[];
int[] intArray; // = int intArray[];
double[] doubleArray; // = double doubleArray[];
String[] stringArray; // = String stringArray[];
Stack에 배열의 식별자(변수명)을 저장하고 실제 데이터는 Heap 공간에 저장하여
변수명이 배열의 첫 주소를 가지고(참조하고) 있음
{}
으로 값 목록을 직접 초기화 가능타입 배열명[] = { 값0, 값1, 값2, ... };
new
연산자를 활용한 초기화타입[] 배열명; 배열명 = new 타입[] { ... };
// 1. 직접 초기화
String[] days = {"월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"};
// 2. new 연산자를 활용한 초기화
String[] days;
days = new String[] {"월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"};
int source[] = {1,2,3};
int target[] = new int[10];
// 배열 복사
for (int i = 0; i < source.length; ++i) {
target[i] = source[i];
}
결과 : target == {1, 2, 3, 0, 0, 0, 0, 0, 0, 0}
int source[] = {1,2,3};
int target[] = new int[10];
System.arraycopy(
source, // 원본 배열
0, // 시작 인덱스
target, // 복사 대상 배열
0, // 대상 배열 인덱스
source.length); // 복사 할 길이
결과 : target == {1, 2, 3, 0, 0, 0, 0, 0, 0, 0}
target
배열의 크기와 상관 없이 source
배열을 그대로 복사하여 target에 할당(덮어쓰기) int source[] = {1,2,3};
int target[] = new int[10];
target = source.clone();
결과 : target == {1, 2, 3}
타입[][] 변수 = { {...}, {...}, ... }
// 2차원 배열 선언
int twoDimen[][] = new int[5][10]; // 5행 10열 배열
// 기본데이터가 있을 때
int[][] table = {
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }, // 1행
{ 2, 3, 4, 5, 6, 7, 8, 9, 0, 1 }, // 2행
{ 3, 4, 5, 6, 7, 8, 9, 0, 1, 2 }, // 3행
{ 4, 5, 6, 7, 8, 9, 0, 1, 2, 3 } // 4행
};
// 행 배열 확인 (0 ~ table.length-1)
System.out.println("table.lenght:" + table.length); // table.lenght:4
// 열 배열 확인
System.out.println("table[2].length:" + table[2].length); // table[2].length:10
int sum = 0;
for (int row = 0; row < table.length; ++row) {
for (int col = 0; col < table[row].length; ++col) {
System.out.printf(table[row][col]+" ");
sum += table[row][col];
}
System.out.println();
}
System.out.println("요소의 합:" + sum);
/*
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
4 5 6 7 8 9 0 1 2 3
요소의 합:180 */