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)--------->给你“真实”
我的问题:
当你使用“==”设置两个彼此相等的对象时,你是否试图找出它们的内存地址是否相等?我为这种困惑道歉。也许我不明白在这里比较和平等的是什么?非常感谢你的帮助。
答案 0 :(得分:2)
" =="并不意味着"设置为"完全 - 它完全独立于" ="。
" =="意味着不同的东西取决于它使用的是什么。对于对象,它比较内存位置 - 等效地,它调用Object的.equals()实现。作为" ="分配一个引用,它会使内存位置相同,所以" =="将返回真实。 " .clone"在新的内存位置创建一个对象的副本,所以" =="将返回false。
当您使用.equals()时,它可以根据您调用它的对象的动态类型来确定实现。对于日历,它以直观的方式检查值。没有什么可以阻止你形成一个.equals()为你写的某个类翻转硬币来确定结果。
答案 1 :(得分:1)
==
和.equals
之间存在差异。
你可以阅读this post,我可以给你一个更好的答案