黑马程序员技术交流社区

标题: 张老师基础加强的时候编译错误 [打印本页]

作者: 杨杨    时间: 2013-3-2 11:08
标题: 张老师基础加强的时候编译错误
本帖最后由 杨杨 于 2013-3-3 13:57 编辑


  1.         /**
  2.          * @param args
  3.          * @throws Exception
  4.          */
  5.         public static void main(String[] args) throws Exception {
  6.                
  7.                 int[] a1=new int[3];
  8.                 int[] a2=new int[4];
  9.                 int[][] a3=new int[3][4];
  10.                 String[] a4= new String[4];
  11.                 System.out.println(a1.getClass()==a2.getClass());
  12.                 System.out.println(a1.getClass()==a3.getClass());//Incompatible operand types Class<capture#3-of ? extends int[]> and Class<capture#4-of ? extends int[][]>
  13.                 System.out.println(a1.getClass()==a4.getClass());//Incompatible operand types Class<capture#5-of ? extends int[]> and Class<capture#6-of ? extends String[]>
  14.                
  15.         }

  16.         private static void ChangerVale(Object obj) throws Exception {
  17.                 Field[] fields= obj.getClass().getFields();//getDeclaredFields();
  18.                 System.out.println(fields.length);
  19.                 for(Field field:fields){
  20.                         if(field.getType()==String.class){
  21.                                 String oldchar= (String)field.get(obj);
  22.                                 String newString =oldchar.replace('b', 'a');// "a" "b" 与 'a' 'b'区别
  23.                                 field.set(obj, newString);
  24.                         }
  25.                         
  26.                 }
  27.         }

复制代码
是都是class 对象 应该能比较类型 张老师讲的时候不报错我写的时候报编译时异常
是java jdk改进了还是我写错了
作者: 付玉光    时间: 2013-3-2 11:33
本帖最后由 付玉光 于 2013-3-2 11:58 编辑

//首先我可以肯定的告诉你,你写的代码没有了。

//编译时会报异常 ,也不是JAVA JDK改进了,

//因为它们都是字节码文件对象(是实例对象),但它们是不同类型的字节码文件对象。

//不同类型的实例对象,相比编译时是肯定会报异常的!

//,所以,当它们类型不同时,是不能比较的。

//下边是我给你举的一个小案例,你测试一下,就会明白的。
class Person {
         private int age;
         private String name;
}
class Dog {
         private int age;
         private String name;
}

class YY1
{
        public static void main(String[] args) throws Exception {
                Person p = new Person();
                                Dog d = new Dog();
                                int i = 5;
                                String s = "ss";
                                System.out.println(s==i);//编译报:不可比较的类型:java.lang.String 和 int
                                System.out.println(p==d);//编译报:不可比较的类型:Person 和 Dog
        }
}
希望对你帮助{:soso_e100:}
作者: 杨杨    时间: 2013-3-2 11:46
付玉光 发表于 2013-3-2 11:33
//首先我可以肯定的告诉你,你写对了。

//报编译时异常 ,也不是JAVA JDK改进了,

他们返回类型都是class类 a1 返回 Class<? extends int[]> java.lang.Object.getClass()
a3 Class<? extends int[][]> java.lang.Object.getClass()
应该是java.lang.Object.getClass 做了改进jdk 1.6 比jdk1.5 做了改进








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