强制类型转换讨论

一 强制类型转换的两个注意点

  • 基本类型之间转换只能在数值类型之间进行。
  • 引用类型之间的转换只能在具有继承关系的两个类型之间转换。

二强制类型转换应用

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;
}

猜你喜欢

转载自cakin24.iteye.com/blog/2327930