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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一直很安静 中级黑马   /  2013-11-15 11:22  /  1246 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int[] a1={2,3,4};
String[] a2={"a","b","c"};
System.out.println (a1.getClass()==a2.getClass());//为什么这句话会编译失败、提示操作数类型不兼容,可是视频里这样明明是能运行的

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

5 个回复

倒序浏览
因为getClass()不能用于操作原始类型如(int ,double这样的)
要获得字节码有3种方式我一一给你列举
  1.         Class cls1 = int.getClass();//这样基本类型不能使用这种方法,所以会报错
  2.                 要想整型使用getClass,那你只能定义Integer这个对int的包装类来使用。
  3.                 Class cls2 = int.class;
  4.                 Class cls3 = String.getClass();
  5.                 Class cls4 = String.class;
  6.                 Class cls5 = Class.forName("java.lang.String");
复制代码
这个和数组没有直接关系,看的是类型。
但是在这之前你应该清楚知道为什么有Integer这些外覆型别的存在,因为诸如int/double/float这些基本型别不属于类,无法自身转换成String。所以String和Int直接不存在什么直接联系。
那为什么我们平时看到
int a =5;
String b = "0"+5;
可以转换,实际是在编译时系统会自动把a转换成和""一样的String,但是其在资源耗费上要相对大一些;

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
楼主好,==比较的是2个变量对应的内存空间存放的值是否相同。要进行比较参与比较的2个变量他们得有可比较性啊。例如你让一个int类型的变量和boolean的变量进行比较这显然没有意义,他们存储的值肯定不一样。再例如:
class MM{};classNN{},此时MM m=new MM();NN n = new NN();n==m是错误的,此时这2个对象是完全不一样的东西,所以他们的地址是不可能相同的即n和m对应的内存存储的值是不可能相同的,没有比较性,我们把上面的代码修改下class MM  extends NN{};classNN{}
此时MM m=new MM();NN n = new NN();n==m;是能编译通过的,因为 NN类型的引用变量是有可能指向MM的对象的所以引用变量n和m是有可能相同的所以具有比较性。再看看你说的代码 a1.getClass()==a2.getClass();;a1.getClass()的类型是Class<?extends int[]> a2.getClass()是Class<?extends String[]>的,这2中东西是不可能同时共享一片内存的,即不存在一个东西既是Class<?extends int[]>类型的又是Class<?extends String[]>类型的。
把a1.getClass()==a2.getClass();这段代码改成:Class a1c = a1.getClass();Class a2c = a2.getClass();system.out.println(ac1=ac2);此时能编译通过
因为此时是Class和Class类型的引用变量在比较,它们有可能指向同一片内存所以具有比较性。
总之,比较的2个变量它要有可能相同,才具有比较性,如果肯定不相同的话那比较有什么意义。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
一直很安静 来自手机 中级黑马 2013-11-15 19:08:24
板凳
一步一脚印 发表于 2013-11-15 12:00
因为getClass()不能用于操作原始类型如(int ,double这样的)
要获得字节码有3种方式我一一给你列举这个 ...

我那不是基本类型 是数组啊
回复 使用道具 举报
一直很安静 来自手机 中级黑马 2013-11-15 19:09:09
报纸
linjl_ll 发表于 2013-11-15 13:05
楼主好,==比较的是2个变量对应的内存空间存放的值是否相同。要进行比较参与比较的2个变量他们得有可比较性 ...

可是看视频里老师写得是一样的
回复 使用道具 举报
一直很安静 发表于 2013-11-15 19:09
可是看视频里老师写得是一样的

可能myeclipse使用的版本不一样吧,有可能编译时采用的1.4的jdk。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马