package casting;
public class Casting1 {
public static void main(String[] args) {
int intvalue = 10;
long longValue;
double doubleValue;
longValue = intvalue; // int -> long
System.out.println("longValue = " + longValue); // 작은 범위를 큰범위에 넣는것은 형변환에 문제가 없다.
doubleValue = intvalue;
System.out.println("doubleValue = " + doubleValue); // 형변환은 되지만 소수점 형태로 출력된다.
doubleValue = 20L; // long -> double
System.out.println("doubleValue2 = " + doubleValue);
}
}
자동 형 변환
doublevalue = intvalue doublevalue = (double) intvalue doublevalue = (double) 10 doublevalue = 10.0 // 자동 형변환
- int의 값을 강제로 double로 바꾼다.
package casting;
public class Casting2 {
public static void main(String[] args) {
double doublevalue = 1.5;
int intvalue = 0;
//컴파일 오류 발생
// 1.타입 불일치 , 2.double -> int convert 불가능
//intvalue = doublevalue;
// 소수점 때고 서라도 보고 싶으면
intvalue = (int)doublevalue; // 직접 자료형을 지정해서 변환 (명시적 형변환)
}
}
명시적 형 변환
intvalue = (int) doublevalue; intvalue = (int) 1.5; intvalue = 1; //int형이기 때문에 변환
package casting;
public class Casting3 {
public static void main(String[] args) {
long maxIntValue = 2147483647; // int의 최대값 , 리터럴
long maxIntOver = 2147483648L; // int의 최대값 + 1(초과) , 초과된 값을 표현하기 위해서는 L 표기법을 사용해야 한다.
int intvalue = 0;
intvalue = (int) maxIntValue; // 형변환 , int의 최고 범위까지 표현가능하기 때문에 가능하다.
System.out.println("intvalue = " + intvalue);
intvalue = (int) maxIntOver; // 형변환 , int의 범위를 넘어선 경우
System.out.println("intvalue = " + intvalue); // int를 넘기면 제일 작은 범위이로 돌아간다 그 이후로 수가 증가하면 작은 범위에서 증가한다.
}
}
package casting;
public class Casting4 {
public static void main(String[] args) {
int div1 = 3/2; // 1.5
System.out.println("div1 = " + div1); // 하지만 int 이기 때문에 1 이나온다
double div2 = 3/2; // 1.5
System.out.println("div2 = " + div2); // 1.0
double div3 = 3.0 / 2; // 1.5
System.out.println("div3 = " + div3); // 1.5
double div4 = (double) 3/2;
System.out.println("div4 = " + div4); // 1.5
int a = 3;
int b = 2;
double result = (double)a/b;
System.out.println("result = " + result); // 1.5
}
}