A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alvis2015 中级黑马   /  2015-2-20 15:43  /  1036 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. int[] a1 = new int[3];
  2. String a2 = new String[3];
  3. System.out.println(a1.getClass()==a2.getClass());
复制代码

以上的代码中,打印语句会不会编译错误?

点评

==只能比较基本类型,不能比较引用类型,所以得用equals比较  发表于 2015-2-20 17:27

7 个回复

倒序浏览

回复 使用道具 举报 1 0


String s1 = "abc";
String s2 = "abcd";
System.out.println(s1==s2);//此处编译可以通过
所以不是引用类型不能用==比较。
System.out.println(a1.getClass()==a2.getClass());编译时出现Incompatible operand types提示,说明两者不是同一种类型,没有比较性。但两者都是Class类的两个字节码实例对象,所以搞不懂呢,是不是两者产生的Class字节码对象还分属于Class类下面的不同子类?
回复 使用道具 举报
好吧,我大概懂了,看了API和源码,我想是加了泛型的原因。。囧。。

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 加油

查看全部评分

回复 使用道具 举报
会,String那个地方少了[]。关于数组字节码的问题,是这样的:只要数组的类型和维度(一维、二维)相同都是同一份字节码文件
回复 使用道具 举报
编译下不就知道了吗
回复 使用道具 举报
Ansel 发表于 2015-2-22 20:11
编译下不就知道了吗

张老师的视频里编译不会出错
我编译的时候出错了
我现在搞清楚了,张老师的JDK版本太低了,泛型没有之前,程序靠Object类提高扩展性
JDK1.5(包括)之后的版本加了新特性:泛型
此处编译错误正是因为加了泛型的缘故。Class<T>......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马