Java에서 변수 캐스팅
이 자습서에서는 Java에서 변수를 캐스팅하거나 변수를 다른 유형으로 변환하는 방법을 소개합니다.
캐스팅은 프로그래밍 언어에서 하나의 값/변수를 다른 유형으로 캐스팅/변환하는 데 사용됩니다. Java는 int, float, double, boolean 등과 같은 다양한 데이터 유형을 지원하며 코드를 작성하는 동안 변수를 캐스팅해야 할 수 있습니다.
Java는 암시적 및 명시적 캐스팅의 두 가지 유형의 캐스팅을 지원합니다. int를 long이나 double로 변환하면 long과 double이 int보다 더 많은 바이트를 사용하기 때문에 Java가 이를 암시적으로 수행하고 우리는 그 반대를 수행합니다(즉, double을 int) 그러면 정수 용량으로 인해 데이터가 손실될 수 있습니다.
따라서 Java는 낮은 데이터 형식에서 높은 데이터 형식으로의 암시적 캐스팅을 허용하지만 높은 데이터 형식에서 낮은 형식으로의 명시적 캐스팅을 허용합니다. 몇 가지 예를 들어 이해합시다.
Java의 암시적 캐스팅
여기 이 예에서 int를 float 유형, 암시적 캐스팅으로 캐스팅합니다. Java는 많은 코드 없이 암시적 캐스팅을 허용하므로 이 코드는 잘 작동합니다.
public class SimpleTesting {
public static void main(String[] args) {
int a = 23;
System.out.println("int " + a);
// int to float - implicit casting
float f = a;
System.out.println("float " + f);
}
}
출력:
int 23
float 23.0
Java의 명시적 캐스팅
경우에 따라 Java는 데이터 손실로 인해 명시적 캐스팅이 필요합니다.
예를 들어 float를 int로 변환하면 소수점 이하 값이 잘립니다. 이것이 Java가 암시적으로 이를 수행하지 않고 컴파일 시간 오류를 발생시키는 이유입니다. 아래 예를 참조하십시오.
public class SimpleTesting {
public static void main(String[] args) {
float a = 23;
System.out.println("float " + a);
// float to int - explicit casting
int f = a;
System.out.println("int " + f);
}
}
출력:
Type mismatch: cannot convert from float to int
이 컴파일 타임 오류는 프로그래머에게 이러한 데이터 손실을 방지하기 위한 경고입니다. 프로그래머가 여전히 캐스트를 원하면 Java는 형식 이름을 함수 괄호로 묶는 캐스트 연산자를 허용합니다.
이 컴파일러는 코드를 컴파일하고 실행하지만 값이 잘린 것을 봅니다. 아래 예를 참조하십시오.
public class SimpleTesting {
public static void main(String[] args) {
float a = 23.5f;
System.out.println("float " + a);
// float to int - explicit casting
int f = (int) a;
System.out.println("int " + f);
}
}
출력:
float 23.50
int 23
cast() 메서드를 사용하여 객체 값을 기본 값으로 변환할 수도 있습니다. 아래 예를 참조하십시오.
public class SimpleTesting {
public static void main(String[] args) {
Integer a = 23;
System.out.println("integer " + a);
// float to int - explicit casting
int i = (Integer.class.cast(a));
System.out.println("int " + i);
}
}
출력:
integer 23
int 23
Java에서 CastException 방지
Java 객체를 캐스팅하는 것도 캐스팅 전에 적절한 클래스 유형이 필요한 주요 관심사입니다. 예를 들어 float 유형을 double로 캐스트하면 Java는 이를 허용하지 않고 ClassCastException을 콘솔에 발생시킵니다.
아래 예를 참조하십시오.
public class SimpleTesting {
public static void main(String[] args) {
Number num = new Float(15.5);
System.out.println(num);
Double d = (Double) num;
System.out.println(d);
}
}
출력:
15.5
Exception in thread "main" java.lang.ClassCastException