자동 형변환
public static void main(String[] args) {
int intValue = 10; // 제일 작음
long longValue; // 중간
double doubleValue; // 제일 큼
// 작은 범위에서 큰 범위로 값을 넣을수 있다
// 큰범위에서 작은 범위로 값을 넣는다면 소수점버림, 오버플로우가 발생한다
longValue = intValue; // int -> long
//long 변수에 int 값을 넣는다
doubleValue = intValue; // int -> double
doubleValue = 20L; // long -> double
}
int -> long -> double 로 값을 넣을수 있다
작은 범위에서 큰 범위로의 대입은 자바 언어에서 허용한다
작은 범위에서 큰 범위로의 숫자타입 대입은 개발자가 직접적으로 형변환을 하지 않아도 자동적으로 변환된다.
이를 자동형변환 / 묵시적 형변환 이라고 한다
명시적 형변환
public static void main(String[] args) {
//큰 범위에서 작은 범위로의 형변환
double doubleValue = 1.5;
int integerValue = 0;
integerValue = doubleValue; // 오류난다
integerValue = (int) doubleValue; 1.5 -> 1로
}
int 는 double 보다 작고 소수점 아래자리를 표현할 수 없다.
이때 강제로 데이터타입을 변환 시킬수 있다
이를 명시적 형변환이라고 한다
public static void main(String[] args) {
//큰 범위에서 작은 범위로의 형변환
double doubleValue = 1.5;
int integerValue = 0;
//integerValue = doubleValue; // 오류난다
integerValue = (int) doubleValue;
integerValue = (int) doubleValue;
integerValue = (int) 1.5; //doubleValue에 있는 값을 읽는다.
integerValue = 1; //(int)로 형변환 한다. intValue에 int형인 숫자 1을 대입한다.
}
형변환을 한다고 해서 1.5의 값이 바뀌는 것이 아니라 int에서 읽을 수있는값인 1이 나오는것이다
doubleValue의 1.5의 값은 유지되며 변수의 값은 대입연산자를 통해 직접 대입할때만 변경된다
형변환과 오버플로우
public static void main(String[] args) {
long maxIntValue = 2147483647;//Integer.MAX_VALUE;
long maxIntOverValue = 2147483648L;// Integer.MAX_VALUE + 1
int intValue = 0;
intValue = (int) maxIntValue; //형변환
System.out.println(intValue);// 2147483647
intValue = (int) maxIntOverValue; // 형변환
System.out.println(intValue); //-2147483648
//-2147483648 숫자는 int 의 가장 작은 숫자이다
}
long 타입 변수 인 maxIntOverValue를 int로 변환했을때 -값이 나온다
int의 최고값을 넘어서기 때문에 표현을 못한다
기존 범위를 초과하여 표현하게 되면 전혀 다른 숫자가 표현되는데 이를 오버플로우라고 한다
오버플로우는 시계가 한바퀴 돈 것 처럼 다시 처음부터 시작한다
계산과 형변환
public static void main(String[] args) {
int div1 = 3/2; // 1
//int 와 int 의 계산 결과는 int 이다
double div2 = 3 / 2; // 1.0
//변수가 double 로 선언되어있지만 int와 int의 계산결과가 int로 나온다
//그러고 double로 타입이 바뀐다
double div3 = 3.0 / 2; // 1.5
// double 이랑 int의 계산결과는 double로 나온다
double div4 = 3 / 2; // 1.5
//(double) int / int - > double / double 이 된다
int a =3;
int b =2;
double result = (double) a/b ;
System.out.println(result);
}
'언어 > JAVA' 카테고리의 다른 글
자바 기초문법/ 메소드 / 오버로딩 / 함수 (1) | 2024.06.10 |
---|---|
자바 기초문법 / 문자 <-> 숫자 (0) | 2024.06.05 |
자바 기초문법 / 반복문 (0) | 2024.06.05 |
scope/코드 블록 (0) | 2024.06.05 |
자바 기초문법 / 조건문 (0) | 2024.06.04 |