首先是这段代码:publicclasstest{publicstaticvoidmain(String[]args){Strings1="Monday";Strings2=newString("Monday");if(s1==s2){System.out.println("s1==s2");}else{System.out.println("s1!=s2");}if(s1.equals(s2)){System.out.println("s1equalss2");}else{System.out.println("s1notequalss2");}}}输出结果是:s1!=s2和s1equalss2;这个我可以理解,使用new操作符后,在堆内存中又新开辟了一块空间,s1和s2在堆内存中的值相同,但是引用的地址不同。但是在博客园的这篇文章看到下面这段代码:publicclasstest{publicstaticvoidmain(String[]args){testobj1=newtest();testobj2=newtest();if(obj1==obj2){System.out.println("obj1==obj2");}else{System.out.println("obj1!=obj2");}if(obj1.equals(obj2)){System.out.println("obj1equalsobj2");}else{System.out.println("obj1notequalsobj2");}}}输出:obj1!=obj2obj1notequalsobj2昨天晚上看了那篇文章的评论,把我自己的理解写出来,但是还是不是很清楚,我大意是这样的:java当中所有类都继承自Object这个基类,在Object中的定义了一个equals方法,这个方法的初始化行为是比较对象的内存地址值(Object的equals方法使用==比较的),但在一些类库中这个方法被覆盖掉了,比如String,Interger,Date这些类中equals有其自己的实现方法,String类继承自Object类,也继承了equals方法,但是重写了该方法,不再比较类在堆内存中的存放地址了,而是比较存在堆中的值。???这个解释不知道对不对,望指教,还有,关于obj1notequalsobj2你们是怎么看的??
莫回无
慕娘9325324
相关分类