데이터를 담을 수 있는 메모리 공간 메모리 공간
변수 - 메모리에 데이터 저장 후 바꿀 수 있다.
상수 - 메모리에 데이터를 한번 저장하면 다시는 바꿀 수 없다.
final double PI;
J = 10; // 처음 선언
// 이후 변경 불가
final int OIL_PRICE = 1450;
기본형 타입
논리형 : boolean
문자형 : char
정수형 : byte,short,int,long
실수형 : float,double
참조형 타입
기본형을 제외한 모든 타입 ex) 배열, 클래스
참조형은 가르킨다는 의미이다
즉 직접 메모리의 값을 갖는게 아니라 메모리의 위치 값을 가지고 있는 것 이다.
new 연산자를 이용하지 않고 인스턴스를 만들 수 있다.
new 연산자를 통해 만들면 힙 영역에 저장하기 때문에 같은 영역을 참조하지 않고 개별적으로 생성한다.
String str1 = "hello"; // 메모리중 상수(변하지 않는 값)가 저장되는 곳에 저장이 된다.
String str2 = "hello"; // 참조형 타입이기 때문에 메모리에 "hello"가 있는지 확인한 후 같으면 같은 값을 참조한다.
// 즉 str1과 str2는 같은 곳을 참조하는 것 이다.
String str3 = new String("hello"); // 상수에서 가져오지 않고 힙 영역에 만든다
String str4 = new String("hello"); // 상수에서 가져오지 않고 힙 영역에 만든다
둘을 비교할 때 == 을 이용하면 레퍼런스 주소를 비교하기 때문에 str1과 str2는 같은 값이라고 나온다 하지만 str3과 str4를 비교하면 다른 값이라고 나온다.
equals()함수를 사용하면 레퍼런스 주소가 아닌 값으 비교하기 때문에 str3.equals(str4) 를 하면 같은 값이라고 나온다.
크기가 작은 타입을 크기가 더 큰 타입으로 바꿀 때는 컴파일러에 별도의 명령을 하지 않아도 됩니다.
ex) int -> long 변환 시
int intValue = 200;
long longValue = intValue;
크기가 큰 타입을 크기가 더 작은 타입으로 바꿀 때는 명시적으로 변환 해주어야 한다
ex) long -> int 변환 시
long longValue = 20;
int intValue = (int) longValue;
++를 앞에 붙일 시 먼저 값에 +1을 해준 후 대입한다. ++가 뒤에 있을 시 먼저 대입한 후 값에 +1을 해준다
int i = 1;
int j = i++; // j에 i를 대입한 후 i에 1을 더해준다
// j = 1 , i = 2
int k = 1;
int l = ++k; // k에 1을 더한 후 l에 대입한다
// l = 2 , k = 2