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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-3-16 11:13  /  1531 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-3-16 11:26 编辑
  1. public static void arrayTest()throws Exception {
  2.                 int[] a1 = new int[3];
  3.                 int[] a2 = new int[4];
  4.                 int[][] a3 = new int[2][3];
  5.                 String[] a4 = new String[3];
  6.                
  7.                 System.out.println(a1.getClass() == a2.getClass());
  8.                 //System.out.println(a1.getClass() == a4.getClass());
  9.                 //System.out.println(a1.getClass() == a3.getClass());
  10.                
  11.         }
复制代码
其中注释的那两句会报错,提示
操作数类型 Class<capture#12-of ? extends int[]> 和 Class<capture#13-of ? extends String[]> 不兼容
但是我看张老师的视频就能编译成功,是不是我这写的有什么错误呢?求解

7 个回复

正序浏览
黄玉昆 黑马帝 2013-3-16 15:37:04
8#
孙晋学 发表于 2013-3-16 14:27
==比较的时候,两者要有继承关系的。比如new Cat() == new Dog();比较没有什么意义啊 ...

你说的这个不是一个类型的,当然不行了,但是我说的那个都是Class类型的,为什么就没有意义呢?
回复 使用道具 举报
黄玉昆 发表于 2013-3-16 12:36
只是有点不明白,为什么同样是Class类型的字节码对象,为什么就不能比较呢? ...

==比较的时候,两者要有继承关系的。比如new Cat() == new Dog();比较没有什么意义啊
回复 使用道具 举报
孙晋学 发表于 2013-3-16 11:53
==在判断引用类型的时候,比较的两个值必须在一个继承树上。
  比如 new Animal() == new Cat();//编译合法 ...

只是有点不明白,为什么同样是Class类型的字节码对象,为什么就不能比较呢?
回复 使用道具 举报
==在判断引用类型的时候,比较的两个值必须在一个继承树上。
  比如 new Animal() == new Cat();//编译合法
         new Cat() == new Dog();//编译报错
错误提示中指明了一个extends int[],一个extends String[],不具有继承关系
感觉可以强制转换成Object类型试试

回复 使用道具 举报
黄玉昆 发表于 2013-3-16 11:25
果然管用,谢谢

客气了,以前我也这样写的,但是现在这样写直接就编译出错.说实话这只是我猜的,具体怎么回事期待高手回答哦
回复 使用道具 举报
刘军亭 发表于 2013-3-16 11:22
可以用equals试试. == 的比较也许jdk高版本的用到泛型,把问题弄到了编译时期.

果然管用,谢谢
回复 使用道具 举报
可以用equals试试. == 的比较也许jdk高版本的用到泛型,把问题弄到了编译时期.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马