1. 상수(= 리터럴)의 저장
- 상수는 "자료형을 기반"으로 저장된다.
- 하지만 자바의 상수 저장방식은 기본적으로 "고정"되어 있다.
상수 타입 | 저장 방식 |
정수 | int |
실수 | double |
2. 접미사
- 자바는 상수의 자료형 검사에 매우 엄격하다.
- 상수의 크기(데이터)를 기준으로 자료형을 결정짓지 않고, 정수형은 무조건 int, 실수형은 무조건 double로 표현하기 때문에, 그 이 외의 다른 자료형으로 표기하려면 접미사를 붙여야 한다.
class Hyunndy
{
pubilc static void main(String[] arm)
{
long num1 = 1000000000; // 컴파일 불가
int num2 = 1000000000; // 컴파일 불가
long num3 = 10000000000L; // 컴파일 가능
1000000000은 int형의 표현 범위를 넘어서는 숫자 이다.
그래서 long에 할당하려고보니, 값이 너무 크다고 에러가 난다.
왜?
"JAVA는 상수의 자료형 검사에 엄격하다"
정수형 상수는 무.조.건 int형으로 표현된다.
따라서 우선적으로 이 숫자가 int형에 표현이 가능한지 판단한다.
따라서, int형으로 표현안되는 숫자는 long형으로 표현해달라고 "명시적"으로 표현해야한다.
long num3 = 1000000000L;
뒤의 접미사 L은 이 상수를 long형 데이터로 표현해달라는 말이다.
double num1 = 18.75; // 컴파일 가능
float num2 = 18.75; // 컴파일 불가
float num3 = 18.75F; // 컴파일 가능
실수형 상수는 무조건 double로 표현된다.
float num2 = 18.75; 가 오류가 나는 이유는
자바 컴파일러는 값의 표현에 사용되는 바이트 크기를 기준으로 판단하기 때문에,
4바이트는 8바이트보다 모자라다는 뜻이다.
따라서, float형으로 표현해달라고 "명시적"으로 표현해야한다.
float num3 = 18.75F;
}
}
3. 자료형의 변환이 의미하는 것은?
- " 1과 1.0은 컴퓨터의 입장에서는 다른 수다. "
- 왜? 데이터를 구성하는 비트열이 다르기 때문에!
데이터 | 비트 열 |
int 형 데이터 1 | 00000000 00000000 00000000 000001010 |
double 형 데이터 1.0 | 00111111 10000000 00000000 00000000 |
- 이렇게 다르기 때문에, 컴퓨터의 입장에서는 1과 1.0은 다른 수 이다.
4. 자료 형의 변환
- 형 변환이란 값의 표현 방식(비트 열)을 바꾸는 것이다.
- JAVA에서 형 변환은 두 종류가 있다.
- 연산의 대상이 되는 두 피연산자의 자료형이 일치하지 않아서 자동으로 발생하는 형 변환
- 명시적으로 형 변환 연산자를 이용해 발생시키는 형 변환
5. 자동 형 변환
- CPU는 하나의 연산에 사용되는 두 피연산자의 자료형이 다를 경우, 연산을 진행하지 못하도록 설계되어 있다.
- 왜? 컴퓨터는 2진수로 표현되니까!
- 따라서, "1 더하기 1.0" 같은 연산을 할 경우, 표현법을 하나로 통일시킨 다음에 계산을 해야한다.
- "데이터의 손실"이 발생하지 않거나, 발생하더라도 경미한 경우에만 자동 형 변환을 허용하기 때문에,
- 다음의 자동 형 변환 규칙을 사용한다.
JAVA의 자동 형 변환 규칙
byte -> short ->
int -> long -> float -> double
char ->
long이 8바이트고, float이 4바이트인데 long에서 float으로 자동 형 변환이 되는 이유는,
JAVA의 자동 형 변환 규칙이 바이트 크기가 아닌, "값의 표현 범위"를 기준으로 정의되었기 때문.
6. 명시적 형 변환
자동 형 변환 규착에 위배 되는 상황에서도 "명시적 형 변환"이 이뤄지도록 할 수 있다.
class Hyunndy
{
public static void main(String[] args)
{
char ch1 = 'A';
char cg2 = 'Z';
int num1 = ch1;
int num2 = (int)ch2;
}
}
'Deperecated > JAVA' 카테고리의 다른 글
JAVA관련 토막 지식. (0) | 2019.12.19 |
---|---|
JAVA 기본서 공부 - 4 <연산자> (0) | 2019.12.19 |
JAVA 기본서 공부 -2 <변수&자료형> (0) | 2019.12.19 |
Java 기본서 공부 - 1 <자바 개발환경> (0) | 2019.12.15 |
Java와 C++의 차이점. (0) | 2019.12.15 |