一 强制类型转换的两个注意点
- 基本类型之间转换只能在数值类型之间进行。
- 引用类型之间的转换只能在具有继承关系的两个类型之间转换。
二强制类型转换应用
1代码示例
public class ConversionTest
{
public static void main(String[] args)
{
double d = 13.4;
long l = (long)d;
System.out.println(l);
int in = 5;
// 试图把一个数值类型的变量转换为boolean类型,下面代码编译出错
// 编译时候会提示: 不可转换的类型
// boolean b = (boolean)in;
Object obj = "Hello";
// obj变量的编译类型为Object,Object与String存在继承关系,可以强制类型转换
// 而且obj变量实际上类型是String类型,所以运行时也可通过
String objStr = (String)obj;
System.out.println(objStr);
// 定义一个objPri变量,编译类型为Object,实际类型为Integer
Object objPri = new Integer(5);
// objPri变量的编译时类型为Object,objPri的运行时类型为Integer,Object与Integer存在继承关系
// 可以强制类型转换,而objPri变量实际上类型是Integer类型,
// 所以下面代码运行时引发ClassCastException异常
String str = (String)objPri;
}
}
2运行结果
13
Hello
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at ConversionTest.main(ConversionTest.java:23)
3结果分析
3.1a处代码运行时会引发异常,因为objPri对象运行时的实际类型是Integer,它无法转化为string。
3.2 考虑到进行强制类型时可能出现异常,为了让程序更健壮,a处代码可修改如下:
if(objPri instance of String)
{
String str=(String)objPri;
}