Java 将两个对象设置为彼此相等并查找其布尔结果

Java 将两个对象设置为彼此相等并查找其布尔结果,java,oop,boolean,Java,Oop,Boolean,显示: calendar==calendar1----------------->为您提供“true” calendar==calendar2----------------->给出“false” calendar.equals(calendar2)--->为您提供“true” 我的问题: 当您使用“==”将两个对象设置为彼此相等时,您是否正在尝试查找它们的内存地址是否相等?我为这一混乱道歉。也许我不明白什么是比较和平等?非常感谢您的帮助。“==”根本不意味着“设置为”-它完全独立于“=” “=

显示:

calendar==calendar1----------------->为您提供“true”

calendar==calendar2----------------->给出“false”

calendar.equals(calendar2)--->为您提供“true”

我的问题:

当您使用“==”将两个对象设置为彼此相等时,您是否正在尝试查找它们的内存地址是否相等?我为这一混乱道歉。也许我不明白什么是比较和平等?非常感谢您的帮助。

“==”根本不意味着“设置为”-它完全独立于“=”

“==”表示不同的东西,取决于它的用途。对于对象,它比较内存位置-等价地,它调用对象的.equals()实现。当“=”分配引用时,它将使内存位置相同,因此“=”将返回true。“.clone”在新内存位置创建对象的副本,因此“==”将返回false

使用.equals()时,由调用它的对象的动态类型决定实现。对于日历,它以直观的方式检查值。没有什么可以阻止你对你编写的某个类使用.equals(),不过你可以掷硬币来决定结果。

“==”根本不意味着“设置为”-它完全独立于“=”

“==”表示不同的东西,取决于它的用途。对于对象,它比较内存位置-等价地,它调用对象的.equals()实现。当“=”分配引用时,它将使内存位置相同,因此“=”将返回true。“.clone”在新内存位置创建对象的副本,因此“==”将返回false


使用.equals()时,由调用它的对象的动态类型决定实现。对于日历,它以直观的方式检查值。没有什么可以阻止你对某个类使用.equals(),不过你可以用掷硬币来决定结果。

但是
==
.equals
之间有区别。
你可以阅读,我可以给你一个更好的答案在
=
.equals
之间有区别。
您可以阅读,当您使用“==”将两个对象设置为彼此相等时,我可以给您一个更好的答案

,您是否正在尝试查找它们的内存地址是否相等?对因此引用相等。哦,好的!那么,这是否意味着在创建对象的克隆时,该克隆会占用不同的内存地址?非常感谢您的回复和回答是的。《克隆人》是一本独立的参考书。啊,我看到了@Elliott Frisch,非常感谢!!我希望我能给你一张支票/信用卡,但我的账户不允许我这样做。我很抱歉,但非常感谢你@MikeCAT在哪里比较字符串?阅读问题当您使用“==”将两个对象设置为彼此相等时,您是否试图确定它们的内存地址是否相等?对因此引用相等。哦,好的!那么,这是否意味着在创建对象的克隆时,该克隆会占用不同的内存地址?非常感谢您的回复和回答是的。《克隆人》是一本独立的参考书。啊,我看到了@Elliott Frisch,非常感谢!!我希望我能给你一张支票/信用卡,但我的账户不允许我这样做。我很抱歉,但非常感谢你@MikeCAT在哪里比较字符串?阅读问题,非常感谢。你真是太棒了!!非常感谢你。你真是太棒了!!非常感谢你的回答。你真是难以置信!!非常感谢你的回答。你真是难以置信!!
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));