java 反射机制的一个简单问题?

Wwushuang 2009-12-12 04:14:32
我在对两个不同类型或者是不同维数的数组对象字节码进行比较时 提示错误不能编译 代码如下:

int [] a1=new int[]{1,2,3};
int [][]a3=new int [2][3];
String []a4=new String[]{"a","b","c"};
System.out.println(a1.getClass()==a3.getClass());//就是底下这两句有问题
System.out.println(a1.getClass() == a4.getClass());

我用的是jdk1.6 看视频的时候是可以运行的
...全文
271 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
liguohao00 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 redduke1202 的回复:]
对于数组类型的变量
编译器在编译时,其实已经知道类型了。也就是说,编译器认为这2个类型是不一样的。根本没有比较的需要。对于总是不成立的比较,其实是没有意义的。
这个编译错误是 JDK 1.6的新功能
[/Quote]
20楼说得最有理,我把源级别调到1.4不报错,调到1.5或1.6就会报错。
是那个意思,不管怎么比较,类型不一样,永远是false!
adslcenter 2010-12-18
  • 打赏
  • 举报
回复
错误信息在哪里
三打不留点 2010-12-18
  • 打赏
  • 举报
回复
学习啊
hugogoo 2009-12-13
  • 打赏
  • 举报
回复
学习了
「已注销」 2009-12-13
  • 打赏
  • 举报
回复
对于数组类型的变量
编译器在编译时,其实已经知道类型了。也就是说,编译器认为这2个类型是不一样的。根本没有比较的需要。对于总是不成立的比较,其实是没有意义的。
这个编译错误是 JDK 1.6的新功能
Wwushuang 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cangyingzhijia 的回复:]
Class a = a1.getClass();
Class b = a3.getClass();
System.out.println(a ==b);
[/Quote]

这样写确实可以的 可是我那样写也是没有错误的呀 直接比较不也是一样的了
很是郁闷 看别人写的就可以的
Wwushuang 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 tsinghe 的回复:]
你利用反射获得的是Class对象,不可能直接比较的。应该用instanceof的
[/Quote]

可以的 这只是字节码的比较
Wwushuang 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 whut0802 的回复:]
在eclipse中运行没问题啊
[/Quote]

不是吧 我换了几个IDE工具都提示有错 你的jdk是?
tsinghe 2009-12-13
  • 打赏
  • 举报
回复
你利用反射获得的是Class对象,不可能直接比较的。应该用instanceof的
whut0802 2009-12-13
  • 打赏
  • 举报
回复
在eclipse中运行没问题啊
hy158753228 2009-12-12
  • 打赏
  • 举报
回复
补充下,我上面说的一维数组和二数组的返回类型是数组元素为int时候。其它类型的元素返回自己可以实验下。比如你上面的a4.getClass()就返回:class [Ljava.lang.String;
hy158753228 2009-12-12
  • 打赏
  • 举报
回复
getClass()是Object 的方法。
对于数组类型,数组有从Object继承吗?(于是我也纳闷了,可以调用getClass()方法)
用此方法时,一维数组会返回class [I 二维数组会返回class [[I
返回的这两个类型不是类,它们的比较同两个基本数据类型的比较,
比如:System.out.println(1==true);一样,会出现无法比较的编译错误。
fskjb01 2009-12-12
  • 打赏
  • 举报
回复
int是基本类型,它的GETCLASS是什么来着。。。。
苍蝇①号 2009-12-12
  • 打赏
  • 举报
回复
Class a = a1.getClass();
Class b = a3.getClass();
System.out.println(a ==b);
Wwushuang 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sbfivwsll 的回复:]
Object a1 = new int[] { 1, 2, 3 };
int[][] a3 = new int[2][3];
String[] a4 = new String[] { "a", "b", "c" };
System.out.println(a1.getClass() == a3.getClass System.out.println(a1.getClass() == a4.getClass());
[/Quote]

你那个不能从int型转换成object的 int是基本类型 不是对象类型
Wwushuang 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pofate 的回复:]
类的比较应该用 instance of
你直接比较两个Class对象,不出万一的话大多数都会触发异常的
[/Quote]

不同类型的字节码不是可以比较的嘛
铑枪--突廆孒 2009-12-12
  • 打赏
  • 举报
回复
Object a1 = new int[] { 1, 2, 3 };
int[][] a3 = new int[2][3];
String[] a4 = new String[] { "a", "b", "c" };
System.out.println(a1.getClass() == a3.getClass System.out.println(a1.getClass() == a4.getClass());
poFate 2009-12-12
  • 打赏
  • 举报
回复
这样子比较也不行,如果你想比较两个类的类型名字是否相同 就 tostring之后再用equals
poFate 2009-12-12
  • 打赏
  • 举报
回复
类的比较应该用 instance of
你直接比较两个Class对象,不出万一的话大多数都会触发异常的
Wwushuang 2009-12-12
  • 打赏
  • 举报
回复
Incompatible operand types Class<capture#6-of ? extends int[]> and Class<capture#7-of ? extends int[][]>

Incompatible operand types Class<capture#8-of ? extends int[]> and Class<capture#9-of ? extends String[]>

这是那个错误提示 也就是不相容的类型
加载更多回复(3)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧