상수 표현
final 붙이면 값이 수정이 안 되기때문에 상수를 표현할 때 쓰인다.
final int NUM = 10;
상수는 처음에 생성되고 값이 안 변하기때문에 인스턴스(객체)마다 상수를 저장할 필요가 없다. 따라서 아래와같이 앞에 static을 같이 붙여서 사용하기도 한다. (공용 static, 수정안됨 final)
만약 상수가 100번 사용될 때, static으로 선언을 안 하면 같은 값을 같는 메모리가 100개 중복 생성되게 된다. 이럴 때 static으로 선언해주면 하나의 메모리를 참조할 수 있기때문에 효율면에서 좋아진다.
static final String COMPANY = “Genesis”;
추가로, 클래스에 final 제어자를 사용하면 해당 클래스는 다른 클래스가 상속받을 수 없게 되고, 메소드에 사용하면 해당 메소드는 오버라이딩을 할 수 없게 된다.
기본형 변수
boolean / char / 정수 / 실수
정수형 변수의 long은 뒤에 접미사 L을 붙여줌.
long longnum = 1234L;
실수형 변수의 float는 뒤에 접미사 f를 붙여줌.
float floatnum = 12.34f;
기본형 변수를 매개변수로 사용한다면, 메서드 안에서 읽는 것만 가능하다. 값을 복사해서 넘기기때문에 원본의 변화가 없다.
참조형 변수
어느 공간에 있는 주소값을 바라보고 있는 변수
참조형 변수는 String / Object / Array / List 등과 같이 대문자로 시작한다. 객체(인스턴스)또한 참조형 변수이다.
참조형 변수를 매개변수로 사용한다면, 값 자체(주소)를 넘기는 것이기때문에 메서드 안에서 읽고 , 변경도 가능하다.
래퍼 클래수 변수
기본형 변수를 클래스로 한번 감싸는 변수 → 그러면 클래스가 돼서 다양한 메소드 사용가능 !
//박싱
//Integer 래퍼 클래스 num에 21의 값을 저장
int number = 21;
Integer num = new Integer(number);
Integer num = number; //이렇게로도 래퍼 클래스 사용 가능
//언박싱
int n = num.intValue(); //래퍼 클래스들은 inValue 메소드 사용가능
자동으로 박싱, 언박싱해주는 방법도 있다.
Integer num = new Integer(17); // Boxing
int n = num.intValue(); // UnBoxing
Character ch = 'X'; // AutoBoxing
char c = ch; // AutoUnBoxing
그냥 박싱, 언박싱 해주는 것보다 코드가 훨씬 더 간결해진다.
문자 vs 문자열
- 문자형은 끝에 널문자 \0가 없음, 문자열은 널문자 있음.
- 문자형은 ‘’(작은 따옴표)를 사용해 선언, 문자열은 “”(큰 따옴표)을 사용해 선언.
- 문자형은 기본형 변수라 Stack영역에 값이 저장되어있지만, 문자열은 참조형변수라 Stack영역엔 주소값이 저장되어있고 Heap영역에 원본 값이 저장되어있다.
형변환
명시적 형변환 vs 암묵적 형변환
저장 공간이 넓은 변수에서 좁은변수로 형변환을 할 땐 앞에 (double) 등으로 명시적으로 형변환해주어야함.
하지만, 저장 공간이 좁은 변수에서 넓은 변수로 형변환을 할 땐 앞에 따로 안 붙여줘도 자동으로 형변환 가능.
변수 타입별 크기 순서
byte(1byte) → short(2byte) → int(4byte) → long(8byte) → float(4byte) → double(8byte)
char(1byte)
작은 크기의 타입이 큰 크기의 타입과 계산될 때, 자동으로 큰 크기의 타입으로 형 변환 됨.
예시 코드
int num = 10;
double res = num/4; //2.0
int res = num/4; //2
double res = num/4.0; //2.5
'개발 > Java' 카테고리의 다른 글
[Java] 배열 / 얕은 복사 / 깊은 복사 / 다차원 배열 (0) | 2024.04.22 |
---|---|
[Java] 조건문 / 반복문 / break / continue (0) | 2024.04.22 |
[Java] 연산자 (1) | 2024.04.22 |
[Java] 사용자에게 값 입력 받기 (0) | 2024.04.22 |
[Java] 자바의 장점 / JVM 구성 (0) | 2024.04.22 |