SCJP -- about instanceof operator E这种写发在编译的时候就会报错,instanceof的使用是为了在做类型转换的时候不至于发生runtime error,在编译的时候就已经做了检查。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Ticker extends Component C 对Ticker 是 Ticker A 对我觉得 BD 用法不对E 肯定不对 Ticker 与 String 没关系 To: csdn_wangkp():我知道E在编译的时候出错,我只想知道instanceof第二个操作数有没有什么限制。 To:hexiaofeng(java爱好者):先谢谢斑竹。如果说没关系就肯定不对那么,我试了这样一种情况:java.sql.Connection conn = null; System.out.println(conn instanceof Component);这两句编译就没错。如何解释? System.out.println(conn instanceof Component);输出 false ??????? To:hexiaofeng(java爱好者):是的,null instanceof XXX永远都是false,不会抛异常。conn和Component应该算没什么关系了吧。 一个初学者的见解不知是否正确:是不是因为String是final类的原因,它不可能有子类的。 To:jcq(疯子弟):还是要谢谢你的提醒。你的水平已经不像一个初学者了。这个我也试过,instanceof的第二个参数也可以是final class。如: String s = new String("a"); System.out.println(s instanceof String); to binghuodao(冰火岛)a instanceof b,有限制,a一定要是b或b的子类。Component不是String类的子类,所以报错,我说过instanceof的使用是为了在做类型转换的时候不至于发生runtime error而采取的一种防范措施 但是String类也有实例,也应该可以用instanceof啊 To:csdn_wangkp():谢谢,不过请看我的第四条发言,Connection也不是Component的子类呀,如何解释a一定要是b或b的子类呢。 To:cherami(cherami):同意,所以说instancdof的第二个参数不一定不能是final class呀。 To:cherami(cherami):同意,编译时是有预先的类型匹配检查。我只是想知道instanceof的第二个参数的写法有没有什么限制。 大概,instanceof也分编译期检查和运行期检查两部分。编译期,检查两个操作数的引用类型。而运行期,才作真正的比较。如果改成这样,就可以编译通过,并输出false了。import java.awt.*; class Ticker extends Component { public static void main (String [] args) { Ticker t = new Ticker(); Object t2=t;boolean test = (t2 instanceof String); System.out.println(test);} } To:jsyx():同意,但是编译器是如何检查两个操作数的引用类型的呢?什么样的关系才能编译通过呢? jsyx说的Object t2=t;boolean test = (t2 instanceof String); binghuodao说的java.sql.Connection conn = null;System.out.println(conn instanceof Component);这两个例子是一样的,Connection的父类也是object,所以编译时当然能通过了,毕竟Object是所有类的父类么,因此我认为intenceof 后面的参数没有任何限制!并且intenceof的两边绝对不能是毫不相关的两个类,否则便已就会出错 我个人认为instanceof的使用是java为了在做类型转换的时候不至于发生runtime error而采取的一种防范措施 ,如果你用另外的写法可能编译器,解释器也能通过,但是去了它的本来意义,价值不是太大了。 To:csdn_wangkp():同意你的说法。那么又谁知道编译器又是怎么判断什么样的写法不报编译错,什么样的写法报呢? To:dennis_woo(小飞):如果我写的时候肯定不会写两个无关的类。但是这个尺度怎么把握?什么算“绝对毫不相关”和“绝对相关”呢? instanceof的使用规则,其实与cast是一样的。明白这点,就不会出错了 To:jsyx():这我到没想过,考虑一下。 看来jsyx说的没什么问题了,非常感谢!!!本贴结束,分数分配如下:jsyx:完全解释清楚,加100分。再次感谢!csdn_wangkp()、hexiaofeng(java爱好者)、jcq(疯子弟)、cherami(cherami)、dennis_woo(小飞):每位帮忙的朋友加50分。谢谢大家。 JAVA(客户端) 和 C++(服务端)socket 通信 问题 请J2ee/j2se高人指点 请各位同仁都说说自己的看法,对于equals这个方法的认识 谁用过HttpURLConnection这个类,请进来看一下 请教:设计一个带checkbox 的listbox JDAVMail的使用 我好无助!!!一个文件有两个类,怎么编译阿? Vector里元素对调问题! 如何转换成相等的 用过iplanet的大虾帮帮忙,谢谢。 请问各位大虾那里有好一点的关于design pattern的网站/论坛! 各位大侠,知道哪有《JAVA2核心技术卷I/II》pdf电子版吗?!
Ticker 是 Ticker A 对
我觉得 BD 用法不对
E 肯定不对 Ticker 与 String 没关系
System.out.println(conn instanceof Component);
这两句编译就没错。如何解释?
输出 false ???????
conn和Component应该算没什么关系了吧。
这个我也试过,instanceof的第二个参数也可以是final class。如:
String s = new String("a");
System.out.println(s instanceof String);
Component不是String类的子类,所以报错,我说过
instanceof的使用是为了在做类型转换的时候
不至于发生runtime error而采取的一种防范措施
编译期,检查两个操作数的引用类型。
而运行期,才作真正的比较。
如果改成这样,就可以编译通过,并输出false了。
import java.awt.*; class Ticker extends Component { public static void main (String [] args) { Ticker t = new Ticker();
Object t2=t;
boolean test = (t2 instanceof String);
System.out.println(test);} }
Object t2=t;
boolean test = (t2 instanceof String); binghuodao说的
java.sql.Connection conn = null;
System.out.println(conn instanceof Component);这两个例子是一样的,Connection的父类也是object,所以编译时当然能通过了,毕竟Object是
所有类的父类么,因此我认为intenceof 后面的参数没有任何限制!并且intenceof的两边绝对不能是毫不相关的两个类,否则便已就会出错
不至于发生runtime error而采取的一种防范措施 ,如果你用另外的写法
可能编译器,解释器也能通过,但是去了它的本来意义,价值不是太大了。
jsyx:完全解释清楚,加100分。再次感谢!
csdn_wangkp()、hexiaofeng(java爱好者)、jcq(疯子弟)、cherami(cherami)、
dennis_woo(小飞):每位帮忙的朋友加50分。
谢谢大家。