设置两个彼此相等的对象并找到它的布尔结果

时间:2016-03-16 00:14:57

标签: java oop boolean

Calendar calendar = new GregorianCalendar(2015, 2, 1);
Calendar calendar1 = calendar;
Calendar calendar2 = (Calendar)calendar.clone();
System.out.println("calendar == calendar1 is " + (calendar == calendar1));
System.out.println("calendar == calendar2 is " + (calendar == calendar2));
System.out.println("calendar.equals(calendar2) is " + calendar.equals(calendar2));

显示:

calendar == calendar1 -------------->给你“真实”

calendar == calendar2 -------------->给你“假”

calendar.equals(calendar2)--------->给你“真实”

我的问题:

当你使用“==”设置两个彼此相等的对象时,你是否试图找出它们的内存地址是否相等?我为这种困惑道歉。也许我不明白在这里比较和平等的是什么?非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

" =="并不意味着"设置为"完全 - 它完全独立于" ="。

" =="意味着不同的东西取决于它使用的是什么。对于对象,它比较内存位置 - 等效地,它调用Object的.equals()实现。作为" ="分配一个引用,它会使内存位置相同,所以" =="将返回真实。 " .clone"在新的内存位置创建一个对象的副本,所以" =="将返回false。

当您使用.equals()时,它可以根据您调用它的对象的动态类型来确定实现。对于日历,它以直观的方式检查值。没有什么可以阻止你形成一个.equals()为你写的某个类翻转硬币来确定结果。

答案 1 :(得分:1)

==.equals之间存在差异。 你可以阅读this post,我可以给你一个更好的答案