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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡刚涛 中级黑马   /  2012-8-15 12:42  /  2273 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡刚涛 于 2012-8-15 12:58 编辑

public class Test {
public static void main(String[] args) throws IOException {
  int [] a1 = new int[]{1,2,3};
  String [] a4 = new String[]{"a","b","c"};
  System.out.println(a1.getClass().equals(a4.getClass()));
// System.out.println(a4.getClass()==a1.getClass());
  System.out.println(a4.getClass().getClass()==a1.getClass().getClass());
    }
}
红色代码报错 ,得到数组的class对象不是可以运用==来比较的吗 ,为什么会报错???

运行结果是
false
true
求解释一下 原理,有点乱!!!

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

11 个回复

倒序浏览
package exception;
public class TestClass {
public static void main(String[] args) {
  int[] a1 = new int[] { 1, 2, 3 };
  String[] a4 = new String[] { "a", "b", "c" };
  System.out.println(a1.getClass().equals(a4.getClass()));
  // 下面这句为什么会报错?原因a4.getClass()返回的是字符串数组类型,而a1.getClass()返回的
  // 是整型数组类型,类型不兼容,这一句就如同这样一句
  // System.out.println(1=="4");//这句编译的时候也通不过的
  // ”==“两边的操作对象应该是同类型的才行
  // System.out.println(a4.getClass()==a1.getClass());
}
}

回复 使用道具 举报
张忠豹 发表于 2012-8-15 12:59
package exception;
public class TestClass {
public static void main(String[] args) {

运行的结果呢 ?
回复 使用道具 举报
由此 Class 对象建模的类的类型。例如,String.class 的类型是 Class<String>。如果将被建模的类未知,则使用 Class<?>

实际上返回的是Class <int[]> a =a1.getClass(),Class<String[]> b =a4.getClass() 两者的类型不同,所以不能用==比较。自己的理解
回复 使用道具 举报
当然是false了……
你要是被Object里的
public boolean equals(Object obj) {
        return (this == obj);
    }
迷惑的话,那就没办法。在obj没有强制类型转换之前,它就是Object类型的。Object类型是个超类,所以可以操作的!
回复 使用道具 举报
张忠豹 发表于 2012-8-15 14:04
当然是false了……
你要是被Object里的
public boolean equals(Object obj) {

结果是true
回复 使用道具 举报
哎呀,太神奇了!希望我的系统木有问题……继续视频中……

qqq.jpg (95.33 KB, 下载次数: 35)

qqq.jpg
回复 使用道具 举报
张忠豹 发表于 2012-8-15 14:37
哎呀,太神奇了!希望我的系统木有问题……继续视频中……

搞定了!!!
回复 使用道具 举报
胡刚涛 发表于 2012-8-15 15:47
搞定了!!!

什么情况,求解释!
回复 使用道具 举报
其实楼主的问题是由于编译器版本进步的原因。
对于数组类型的变量,编译器在编译时,已经知道类型了。也就是说,编译器知道2个类型不一样。所以编译器认为没有比较的必要,就直接报错了。
这个编译错误是 JDK 1.5的新功能,jdk1.5和1.6都会报错,1.4及以下不会报错。
我特意截图给楼主:
回复 使用道具 举报
张忠豹 发表于 2012-8-15 16:11
什么情况,求解释!

第一句就是false
第二个是true,以为都是object
回复 使用道具 举报
曹恒业 发表于 2012-8-15 19:06
其实楼主的问题是由于编译器版本进步的原因。
对于数组类型的变量,编译器在编译时,已经知道类型了。也就 ...

这哥们太霸气了,eclipse都使用的这么熟练……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马