黑马程序员技术交流社区
标题:
关于equals问题
[打印本页]
作者:
wyy283
时间:
2013-7-25 16:54
标题:
关于equals问题
本帖最后由 杨兴庭 于 2013-7-25 23:17 编辑
为什么用String类声明的对象去调用equals方法会返回true
比如String str1 = new String(“java”)
String str2 = new String(“java”)
这个返回的是ture
但是下面的这个语句一定要重写equals中的方法才返回ture,不然就是false
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
作者:
lljwdbklb
时间:
2013-7-25 17:25
String的实现开发人员早就写好了。。你可以看String的源代码。。
作者:
nuoxi0318
时间:
2013-7-25 18:20
本帖最后由 nuoxi0318 于 2013-7-25 18:21 编辑
String是JAVA的基本类型,所有的字符串都是共享的,也就是说你的str1和str2虽然是new了两次,但实际上是一个对象实例,所以equals是true.
这个涉及到JVM对基本类型管理的知识了,JAVA中有很多类似的地方,例如:
List a = new ArrayList(0);
List b = new ArrayList(0);
System.out.print(a.equals(b)); // output true
复制代码
作者:
の放下执著
时间:
2013-7-25 21:17
因为String类已经重写了equals方法,String类中的equals方法: 只要两个引用指向的对象内容一样就返回true。
一切类都直接或间接的继承上帝类object,在object中的equals方法,是当且仅当两个引用指向同一个对象时才返回true,否则返回false(API文档上面写有的,嘿嘿)。
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
自己创建的类,当子类中没有equals方法时,就会调用上帝object中的equals方法,所以就返回false了。要想返回true,可以自己重写equals方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2