引用类型变量的强制转换
来源:互联网 发布:sugarhosts 知乎 编辑:程序博客网 时间:2024/05/18 04:00
编写java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用对象确实包含该方法。
在强制转换之前可以先用instanceof来判断是否可以成功转换,instanceof 的前一个操作数通常是引用类型变量,后一个通常是类。它用于判断前面的对象是否是后面的类或其子类的实例,如果是返回true否则返回false。instanceof前面的操作数的编译类型要么与后面的类相同,要么是后面类的父类,否则会发生编译错误。
引用类型之间的转换只能把一个父类变量转换成子类类型。如果试图把一个父类实例转换成子类类型,则必须这个对象实际上是子类实例才行(即编译时类型为父类类型,运行时为子类类型),否则会发生ClassCastException异常。
public class Test { public static void main(String[] args) { Object o1=new Object();//o1的编译类型是Object,实际类型是Object,是string的父类,所以可以强制转换成string类 String o2=new String(); //o2的编译类型是String,实际类型是String Object o3=new String(); //o3的编译类型是Object,实际类型是String o2=(String)o1; //编译时没错,运行时有错(o2和o1的实际类型不一样) o2=(String)o3; //编译时没错,运行时没错(o2和o3的实际类型一样) o3=(String)o1; //编译时没错,运行时有错(o1和o3的实际类型不一样) o3=o1; //编译时没错,运行时也没错 }}
在强制转换之前可以先用instanceof来判断是否可以成功转换,instanceof 的前一个操作数通常是引用类型变量,后一个通常是类。它用于判断前面的对象是否是后面的类或其子类的实例,如果是返回true否则返回false。instanceof前面的操作数的编译类型要么与后面的类相同,要么是后面类的父类,否则会发生编译错误。
public class Test { public static void main(String[] args) { Object a1=new String(); System.out.println(a1 instanceof Object); //返回true System.out.println(a1 instanceof String); //返回true System.out.println(a1 instanceof Math); //返回false,math是object的子类 System.out.println(a1 instanceof Comparable); //返回true,string实现了comparable接口 String a2=new String(); System.out.println(a2 instanceof Math ); //编译错误因为a2不是math类,也不是math的父类 }}
- 引用类型变量的强制转换
- 引用变量的强制转换类型
- 引用变量的强制类型转换:
- 引用变量的强制类型转换_instanceof
- 5.7.2 引用变量的强制类型转换
- 变量类型的强制转换
- 引用类型的强制类型转换
- java引用类型的强制类型转换
- java引用类型的强制类型转换
- java 多态/引用变量的强制类型转换?/静态的初始化块
- Java中super的限定作用和引用变量的强制类型转换
- PHP 变量类型的强制转换
- Python变量类型的强制转换
- 对于引用类型和强制类型转换的理解
- Java中引用类型变量的转换
- JAVA引用类型强制类型转换
- 强制的类型转换
- 强制类型的转换
- linux 下解压命令
- ARM映像文件
- 查看域名对应IP的命令
- 对cocos2d-x的初步理解
- 模拟技能动画
- 引用类型变量的强制转换
- 如何在Linux下获得一些中国电信运营商的IP地址分配情况
- 内存
- asp.net报出“非静态字段、方法或属性’System.Web.UI.Page.Response.get‘要求对象引用”错误
- tar.xz和lzma文件的解压方法
- 最大方差阈值分割(vc实现)
- 海量数据处理之倒排索引
- 使用gtags、etags、cscope、grep浏览源代码
- Flicker-free Drawing:Techniques to eliminate flicker from your applications