黑马程序员技术交流社区

标题: 菜鸟提问:一个关于反射小问题 [打印本页]

作者: alvis2015    时间: 2015-2-20 15:43
标题: 菜鸟提问:一个关于反射小问题
  1. int[] a1 = new int[3];
  2. String a2 = new String[3];
  3. System.out.println(a1.getClass()==a2.getClass());
复制代码

以上的代码中,打印语句会不会编译错误?
作者: 万合天宜    时间: 2015-2-20 17:25


作者: alvis2015    时间: 2015-2-22 15:05
万合天宜 发表于 2015-2-20 17:25


String s1 = "abc";
String s2 = "abcd";
System.out.println(s1==s2);//此处编译可以通过
所以不是引用类型不能用==比较。
System.out.println(a1.getClass()==a2.getClass());编译时出现Incompatible operand types提示,说明两者不是同一种类型,没有比较性。但两者都是Class类的两个字节码实例对象,所以搞不懂呢,是不是两者产生的Class字节码对象还分属于Class类下面的不同子类?
作者: alvis2015    时间: 2015-2-22 15:17
好吧,我大概懂了,看了API和源码,我想是加了泛型的原因。。囧。。
作者: liaohongjie    时间: 2015-2-22 16:36
会,String那个地方少了[]。关于数组字节码的问题,是这样的:只要数组的类型和维度(一维、二维)相同都是同一份字节码文件
作者: Ansel    时间: 2015-2-22 20:11
编译下不就知道了吗
作者: alvis2015    时间: 2015-2-22 20:29
Ansel 发表于 2015-2-22 20:11
编译下不就知道了吗

张老师的视频里编译不会出错
我编译的时候出错了
我现在搞清楚了,张老师的JDK版本太低了,泛型没有之前,程序靠Object类提高扩展性
JDK1.5(包括)之后的版本加了新特性:泛型
此处编译错误正是因为加了泛型的缘故。Class<T>......




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2