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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xuemeng 中级黑马   /  2013-5-20 16:08  /  3943 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xuemeng 于 2013-5-20 23:17 编辑

public class Demo {
public static void main(String[] args) {
  int[] a1 = new int[] { 1, 2, 3 };
  int[] a2 = new int[4];
  int[][] a3 = new int[2][3];
  String[] a4 = new String[] { "a", "b", "c" };
  System.out.println(a1.getClass() == a2.getClass());
  // 下面代码编译都不能通过, 我看张老师都能编译而且运行, 这个难道是JDK的问题? 还是什么其它的问题? 我的JDK是1.7的, 麻烦帮忙运行一下!!
  System.out.println(a1.getClass() == a4.getClass());
  System.out.println(a1.getClass() == a3.getClass());
  System.out.println(a3.getClass() == a4.getClass());
}
}

18 个回复

倒序浏览
错误信息:如下:::
java.lang.NoClassDefFoundError: shuchu
Caused by: java.lang.ClassNotFoundException: shuchu
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main"
回复 使用道具 举报
曹世明 发表于 2013-5-20 16:12
错误信息:如下:::
java.lang.NoClassDefFoundError: shuchu
Caused by: java.lang.ClassNotFoundExcept ...

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        Incompatible operand types Class<capture#3-of ? extends int[]> and Class<capture#4-of ? extends String[]>
        Incompatible operand types Class<capture#5-of ? extends int[]> and Class<capture#6-of ? extends int[][]>
        Incompatible operand types Class<capture#7-of ? extends int[][]> and Class<capture#8-of ? extends String[]>

        at cn.itcast.demo.Demo.main(Demo.java:11)
什么情况,??  这是我运行的结果, 为什么你的提示是没有找到class
回复 使用道具 举报
1.java:10: 不可比较的类型:java.lang.Class<capture#29 of ? extends int[]> 和
java.lang.Class<capture#283 of ? extends java.lang.String[]>
  System.out.println(a1.getClass() == a4.getClass());
                                   ^
1.java:11: 不可比较的类型:java.lang.Class<capture#674 of ? extends int[]> 和
java.lang.Class<capture#787 of ? extends int[][]>
  System.out.println(a1.getClass() == a3.getClass());
                                   ^
1.java:12: 不可比较的类型:java.lang.Class<capture#371 of ? extends int[][]> 和
java.lang.Class<capture#681 of ? extends java.lang.String[]>
  System.out.println(a3.getClass() == a4.getClass());
回复 使用道具 举报
不好意思,那个是我的一个程序报错,抱歉!
回复 使用道具 举报
曹世明 发表于 2013-5-20 16:27
1.java:10: 不可比较的类型:java.lang.Class 和
java.lang.Class
  System.out.println(a1.getClass() == ...

哦, 我就说!!:L
   你的JDK是1点几的?
   为什么我看张老师的代码就没问题呢?
回复 使用道具 举报

你这一个是一维数组,一个是二维数组,一个是String类型的数组,这是没有办法比较的,类型不同必须要转换为相同的类型才能做比较,你再看看视频,源代码应该和这个有差别吧。

QQ截图20130520164415.png (3.6 KB, 下载次数: 0)

QQ截图20130520164415.png

点评

类型是一样的都是class类型,是具有可比较性的。  发表于 2013-5-20 21:55
回复 使用道具 举报
小石头39910 发表于 2013-5-20 16:46
你这一个是一维数组,一个是二维数组,一个是String类型的数组,这是没有办法比较的,类型不同必须要转换 ...

没有一点区别
回复 使用道具 举报
xuemeng 发表于 2013-5-20 16:52
没有一点区别

那我就不知道了,可是错误提示就是不可比较的类型啊
回复 使用道具 举报
小石头39910 发表于 2013-5-20 16:55
那我就不知道了,可是错误提示就是不可比较的类型啊

  嗯, 你的是JDK1点几??
回复 使用道具 举报
我的也是这样的错误,也没有想到是什么原因。不过把等号改成equals就行了。
回复 使用道具 举报
小石头39910 发表于 2013-5-20 16:46
你这一个是一维数组,一个是二维数组,一个是String类型的数组,这是没有办法比较的,类型不同必须要转换 ...

是同一个类型的,应该都是Class类型的吧,你有没有导包啊?
回复 使用道具 举报
本帖最后由 尖卡斌引 于 2013-5-20 18:57 编辑

编译结果。。

对象之间的比较用equals比较靠谱。
回复 使用道具 举报
黑马-许鹏 发表于 2013-5-20 18:42
是同一个类型的,应该都是Class类型的吧,你有没有导包啊?

木有,嘿嘿,献丑了
回复 使用道具 举报
高手云集啊,我打酱油的
回复 使用道具 举报
楼主的问题我也碰到过,刚好我的JDK也是1.7的,但是Myeclipse是1.6的。我也没有去解决。
你看一下你开发工具的运行环境是多少。最好下一个能够匹配JDK1.7的开发工具。

至于怎么解决,安装JDK1.6就能解决了。或者开发工具支持JDK1.7估计也能解决,后者没有验证。
回复 使用道具 举报
本帖最后由 xuemeng 于 2013-5-20 23:17 编辑
刘胜寒 发表于 2013-5-20 21:57
楼主的问题我也碰到过,刚好我的JDK也是1.7的,但是Myeclipse是1.6的。我也没有去解决。
你看一下你开发工 ...


哦!        我的都是jdk1.7的!!   有时间下个jdk1.6试试!!                             
回复 使用道具 举报
本帖最后由 无憾之 于 2013-7-20 11:02 编辑

在JDK1.4可以通过编译。int[] a1 = new int[3];
int[] a2 = new int[4];
               
int[][] a3 = new int[1][2];
String[] a4 = new String[2];
System.out.println(a1.getClass()==a2.getClass());
System.out.println(a1.getClass()==a3.getClass());
System.out.println(a1.getClass()==a4.getClass());


结果分别是:
true
false
false


回复 使用道具 举报
首先先谢谢你这个问题,受教了.
我个人实验了下自己总结了一下不知道对不对 先看下 下面的这个例子
import java.util.ArrayList;
import java.util.List;


public class test3 {
public static void main(String[] args) {
  
   ArrayList a =new ArrayList();
   ArrayList b = new ArrayList();
   boolean c = a==b;
   System.out.println(c);
   
  ArrayList<Integer> a1 =new ArrayList<Integer>();
  ArrayList<String> b1 = new ArrayList<String>();
  boolean c1 = a1==b1;
  System.out.println(c);
  
}
}
, 在这个例子中 上面的 a == b 编译不会报错 因为他们没有加泛型比较的是两个类的地址值.
下面的 a1 == b1 编译报错 因为他们加上了泛型系统编译器认为他们是两个类型这时候比较的应该是他们的内容 ==是不能比较内容的 所以报错 例如 你可以比较 int a = 3; int a1 = 5;  这两个数你可以用 == 比较,但是int a = 3; String a1 = "5";  他们两个你在用 a == a1 系统就会报错, 因为不是同一个类型.你上面的例子同样的道理
a1.getClass() == a2.getClass() 这两个类返回的Class<>是代着泛型的.他俩都是一位数组并且类型都一样所以属于同一类型的Class;
下面那些报错的
a1.getClass() == a4.getClass();   
   a1.getClass() == a3.getClass();
  a3.getClass() == a4.getClass();
他们返回的Class都是带着泛型的因为他们的类型不一样所以返回的(Class<不一样>)Class所带的泛型参数也不一样.就好比 我举得例子 a == b 可以 a1 == b1 不可以性质一样 .
还有上面的兄弟说 1.4版本可以 那是因为在1.5之前还没有泛型所以能够编译通过.以上的是我自己实验总结不知道对不对仅供参考.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马