黑马程序员技术交流社区

标题: 代码编译出错。 [打印本页]

作者: 清秋    时间: 2011-11-28 14:45
标题: 代码编译出错。
本帖最后由 清秋 于 2011-11-28 20:18 编辑
  1.        
  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());//②

复制代码
提示

Description        Resource        Path        Location        Type
Incompatible operand types Class<capture#10-of ? extends int[]> and Class<capture#11-of ? extends int[][]>        ReflectTest.java        /javaenhance/src/cn/itcast/day1        line 75        Java Problem


刚刚谷歌过,发现也有人问这个问题。没看懂。继续求解

作者: 清秋    时间: 2011-11-28 15:27
System.out.println(a4.getClass());
这句的输出结果为  class [Ljava.lang.String

视频里为什么编译通过了。。。
作者: 侯伟浩    时间: 2011-11-28 15:36
不报错啊,一个true两个false。你怎么会报错呢?
作者: 清秋    时间: 2011-11-28 15:36
侯伟浩 发表于 2011-11-28 15:36
不报错啊,一个true两个false。你怎么会报错呢?

...确实报错...
作者: 侯伟浩    时间: 2011-11-28 15:38
清秋 发表于 2011-11-28 15:36
...确实报错...

我刚刚复制的你的代码试的,一点事没有啊
作者: 清秋    时间: 2011-11-28 15:50
侯伟浩 发表于 2011-11-28 15:38
我刚刚复制的你的代码试的,一点事没有啊

...
  1. package cn.itcast.day1;

  2. public class test {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.         
  9.         int[] a1 = new int[3];
  10.         int[] a2 = new int[4];
  11.         int[][] a3 = new int[2][3];
  12.         String[] a4 = new String[3];
  13.         
  14.         System.out.println(a1.getClass() == a2.getClass());
  15.         System.out.println(a1.getClass() == a4.getClass());//①
  16.         System.out.println(a1.getClass() == a3.getClass());//②

  17.         }

  18. }
复制代码
单列出来也不行。。你JDK什么版本的

作者: 侯伟浩    时间: 2011-11-28 16:39
1.6的。这应该和jdk版本没关系吧。
作者: 清秋    时间: 2011-11-28 18:21
侯伟浩 发表于 2011-11-28 16:39
1.6的。这应该和jdk版本没关系吧。

不清楚。我用的是1.7的。

问题在哪里就不知道了
作者: 侯伟浩    时间: 2011-11-28 20:15
jdk出1.7了?
作者: jianbin65    时间: 2011-11-28 22:13
我这是样搞的:你用System.out.println(a1.getClass())分别输出他们的类型,发现,这些返回的值后,感觉”==“应该换成equals。个人观点
作者: 清秋    时间: 2011-11-29 09:54
本帖最后由 清秋 于 2011-11-29 09:56 编辑

  1. /**
  2. * @author Tina
  3. *
  4. */
  5. public class test {
  6.         public static void main(String[] args) {
  7.         int[] a1 = new int[3];
  8.         int[] a2 = new int[4];
  9.         int[][] a3 = new int[2][3];
  10.         String[] a4 = new String[3];
  11.         
  12.         System.out.println(a1.getClass() == a2.getClass());        //true
  13.                
  14.                 System.out.println("------------------------------");
  15.                 //System.out.println(a1.getClass() == a4.getClass());
  16.                 //System.out.println(a1.getClass() == a3.getClass());               
  17.                 System.out.println("------------------------------");
  18.                
  19.                 System.out.println(a4.getClass().getName());        //[Ljava.lang.String;
  20.                 System.out.println(a4.getClass());                                        //class [Ljava.lang.String;
  21.                 System.out.println(a4.getClass().toString() == a1.getClass().toString());        //false               
  22.                
  23.                 System.out.println(a4.getClass().equals(a1.getClass()));        //false
  24.                 System.out.println(a1.getClass().equals(a3.getClass()));        //false
  25.         }
  26. }
复制代码
贴上代码。其中,注释的两行在我的电脑上还是编译不通过的。
使用equals能解决问题。Java中的“==”和“equals”还是有区别的

至于,为什么别人机子上能通过注释的两行代码我就不清楚了。个人知识有限。也只能理解到这里。

如果大家有时间,可以测试下。贴出自己的结果吧。还有自己的理解吧




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