변수, 상수, 형변환
변수
• 단 하나의 값을 저장할 수 있는 메모리 공간
• 새로운 값을 저장하면 기존의 값은 사라진다.
변수 선언
변수타입 변수이름;
ex) int a;
ex) 주민번호로 초기화할경우 13자리이므로 int의 범위를 벗어나기 때문에 long을 사용해줘야한다.
같은 이름의 변수가 여러 개 존재해서는 안된다.(서로 구별될 수 있어야 함)
변수 초기화
- 변수를 사용하기 전에 처음으로 값을 저장하는 것
변수를 사용하기 전에 초기화를 반드시 해줘야한다.
-> 왜?
메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 저장된 쓰레기 값(Garbage Value)이 남아 있을 수 있기 때문이다.
기본형
• 논리형, 문자형, 정수형, 실수형 총 8가지
• 계산을 위한 실제 값을 저장한다.
참조형
• 객체의 주소를 저장한다.
• 기본형을 제외한 나머지 타입
• 모든 참조형 타입의 기본값은 null
상수
• 값을 저장할 수 있는 공간
• 한번 값을 저장하면 다른 값으로 변경 불가능
ex) final int MAX_SPEED = 10;
• 선언과 동시에 초기화를 해줘야 한다.
• 상수의 이름은 전부 대문자, 여러 단어로 이루어져있으면 _로 구분한다.
• 리터럴은 상수 자체의 값
상수는 리터럴에 의미있는 이름을 붙여서 코드의 이해와 수정을 쉽게 만든다.
형변환
변수 또는 상수 타입을 다른 타입으로 변환하는 것
자동 형변환
• 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환 가능하다.
• 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.
char는 음수가 없기 때문에 short 나 byte로 형변환 할때는 형변환 연산자를 꼭 써줘야한다.(자동.묵시적 형변환x)
1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
실행을 해보면 boolean은 int로 캐스팅 할수 없다는 오류가 나온다.
숫자와 문자열 사이 또는 다른 객체와 문자열 사이에서 형변환 할 수 없다. 이것은 형변환이 아니라 변환이라고 한다.
int<-> boolean도 마찬가지이다.
위의 예제는 삼항연산자로 변환해주는게 가장 좋다.
public class Ex1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 0;
boolean b = true;
//i = (int)b;
i = b ? 1 : 0;
System.out.println(i);
}
}
2. 기본형과 참조형은 서로 형변환할 수 없다.
서로 상속관계에 있는 클래스사이에만 가능하기 때문에 자손타입의 참조변수를 조상타입의 참조변수로, 조상타입의 참조 변수를 자손타입의 참조변수로의 형변환만 가능하다
3. 서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 원칙이지만, 값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.