打字猴:1.70043984e+09
1700439840
1700439841 //类型转换后的空对象是否是String的实例
1700439842
1700439843 boolean b6=(String)null instanceof String;
1700439844
1700439845 //Date对象是否是String的实例
1700439846
1700439847 boolean b7=new Date()instanceof String;
1700439848
1700439849 //在泛型类中判断String对象是否是Date的实例
1700439850
1700439851 boolean b8=new GenericClass<String>().isDateInstance(””);
1700439852
1700439853 }
1700439854
1700439855 }
1700439856
1700439857 class GenericClass<T>{
1700439858
1700439859 //判断是否是Date类型
1700439860
1700439861 public boolean isDateInstance(T t){
1700439862
1700439863 return t instanceof Date;
1700439864
1700439865 }
1700439866
1700439867 }
1700439868
1700439869 就这么一段程序,instanceof的所有应用场景都出现了,同时问题也产生了:这段程序中哪些语句会编译通不过?我们一个一个地来解说。
1700439870
1700439871 “Sting”instanceof Object
1700439872
1700439873 返回值是true,这很正常,“String”是一个字符串,字符串又继承了Object,那当然是返回true了。
1700439874
1700439875 new String()instanceof String
1700439876
1700439877 返回值是true,没有任何问题,一个类的对象当然是它的实例了。
1700439878
1700439879 new Object()instanceof String
1700439880
1700439881 返回值是false, Object是父类,其对象当然不是String类的实例了。要注意的是,这句话其实完全可以编译通过,只要instanceof关键字的左右两个操作数有继承或实现关系,就可以编译通过。
1700439882
1700439883 ‘A’instanceof Character
1700439884
1700439885 这句话可能有读者会猜错,事实上它编译不通过,为什么呢?因为’A’是一个char类型,也就是一个基本类型,不是一个对象,instanceof只能用于对象的判断,不能用于基本类型的判断。
1700439886
1700439887 null instanceof String
1700439888
1700439889 返回值是false,这是instanceof特有的规则:若左操作数是null,结果就直接返回false,不再运算右操作数是什么类。这对我们的程序非常有利,在使用instanceof操作符时,不用关心被判断的类(也就是左操作数)是否为null,这与我们经常用到的equals、toString方法不同。
[ 上一页 ]  [ :1.70043984e+09 ]  [ 下一页 ]