本帖最后由 王红潮 于 2012-9-9 14:32 编辑
张老师的视频有一段是比较字节码对象的
class Test6
{
public static void main(String[] args)
{
int[] a1 = new int[3];
int[] a2 = new int[4];
int[][] a3 = new int[2][3];
String[] a4 = new String[3];
System.out.println(a1.getClass() == a2.getClass()); //相同类型
System.out.println(a1.getClass()== a3.getClass()); //不同类型
System.out.println(a1.getClass()== a4.getClass()); //不同类型
System.out.println(int[].class == int[][].class); //实际上就相当于这样比较了
System.out.println(int[].class == String[].class);
System.out.println(a1.getClass().getName());
}
}
这里a1和a2是同一份字节码,可以用“==”,但不同类型的应该用“equals”比较啊,视频里的运行的没有错误,这个跟编译器版本有关系吗,我已经把版本降到1.5了貌似也不能运行,视频里的为什么就没报错呢?
报错信息:
D:\learning\0901>javac Test6.java
Test6.java:11: 错误: 不可比较的类型: Class<CAP#1>和Class<CAP#2>
System.out.println(a1.getClass()== a3.getClass());
^
其中, CAP#1,CAP#2是新类型变量:
CAP#1从? extends int[]的捕获扩展int[]
CAP#2从? extends int[][]的捕获扩展int[][]
Test6.java:12: 错误: 不可比较的类型: Class<CAP#1>和Class<CAP#2>
System.out.println(a1.getClass()== a4.getClass());
^
其中, CAP#1,CAP#2是新类型变量:
CAP#1从? extends int[]的捕获扩展int[]
CAP#2从? extends String[]的捕获扩展String[]
Test6.java:13: 错误: 不可比较的类型: Class<int[]>和Class<int[][]>
System.out.println(int[].class == int[][].class);
^
Test6.java:14: 错误: 不可比较的类型: Class<int[]>和Class<String[]>
System.out.println(int[].class == String[].class);
^
4 个错误
但视频里运行是没有错误的(为什么?):
搞明白了,一直按照视频操作的,忘记了泛型是1.5以后的新特性,即使版本降到1.5了还是会检查泛型,降到1.4一下就ok了 |