黑马程序员技术交流社区

标题: 为什么代码的Equals下出错,而在MyEclipse下却正常 [打印本页]

作者: doevents    时间: 2013-10-3 19:59
标题: 为什么代码的Equals下出错,而在MyEclipse下却正常
本帖最后由 doevents 于 2013-10-5 19:43 编辑

为什么代码的Equals下出错,而在MyEclipse下却正常?{:soso_e134:}
  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());

作者: 麦子    时间: 2013-10-3 20:22
哥么,这个问题要问你自己,你是否建立的是对应工程项目?
作者: 陈钦涛    时间: 2013-10-3 20:34
本帖最后由 陈钦涛 于 2013-10-3 20:37 编辑

你是想说为什么代码在Eclipse下会出错,MyEclipse下不会报错是吧。首先,你三句对Class对象比较的代码第一句结果是true,下面两句是false,因为是不同的字节码,在Eclipse下你输入后面两句比较的代码还没点运行它就会自动提示你它们是不同份的字节码它们是比不了的,显示红叉给出错误提示,没有提示false。MyEclipse下则在你点运行后会提示你false,在你写代码时候是没显示红叉的。这是不同的IDE对待问题的不同提示方式。
作者: doevents    时间: 2013-10-3 20:39
陈钦涛 发表于 2013-10-3 20:34
你是想说为什么代码在Eclipse下会出错,MyEclipse下不会报错是吧。首先,你三句对Class对象比较的代码第一 ...

是在Editplus下会出错

作者: 陈钦涛    时间: 2013-10-3 21:13
本帖最后由 陈钦涛 于 2013-10-3 22:08 编辑
doevents 发表于 2013-10-3 20:39
是在Editplus下会出错

道理跟在Eclipse和MyEclipse下的情况是一样的,这是工具的问题

作者: 深情小建    时间: 2013-10-4 15:36
这个是java编译器的一个bug,在1.4版本的时候是可以编译通过的,你现在使用的应该是1.6版的吧

下面我给你两种解决方案:

方案一、使用equals()
  1.         public static void main(String[] args)
  2.         {
  3.           int[] a1=new int[3];
  4.           int[] a2=new int[4];
  5.           int[][] a3=new int[2][3];
  6.           String[] a4=new String[3];          

  7.            System.out.println(a1.getClass()==a2.getClass());
  8.            System.out.println(a1.getClass().equals(a3.getClass()));
  9.            System.out.println(a1.getClass().equals(a4.getClass()));
  10.         }

  11. 运行结果:
  12. true
  13. false
  14. false
复制代码
方案二、类型强转Object
  1. public static void main(String[] args)
  2.         {
  3.           int[] a1=new int[3];
  4.           int[] a2=new int[4];
  5.           int[][] a3=new int[2][3];
  6.           String[] a4=new String[3];
  7.           
  8.            System.out.println(a1.getClass()==a2.getClass());
  9.            System.out.println((Object)a1.getClass()==(Object)(a3.getClass()));
  10.            System.out.println((Object)a1.getClass()==(Object)(a4.getClass()));
  11.         }

  12. 运行结果:
  13. true
  14. false
  15. false
复制代码
希望能够帮助到你,(*^__^*) 嘻嘻~~~~~~~~~~~~~~









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