【问题标题】:Setting two objects equal to each other and finding the Boolean result of it [duplicate]将两个对象设置为彼此相等并找到它的布尔结果[重复]
【发布时间】:2016-03-16 00:14:56
【问题描述】:
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) ---------> 给你“真实”

我的问题:

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

【问题讨论】:

  • 当你用“==”设置两个对象相等时,你是不是要判断它们的内存地址是否相等?是的。因此 reference 相等。
  • 哦,好的!那么这是否意味着当您创建对象的克隆时,该克隆占用不同的内存地址?非常感谢您的回复和回答
  • 是的。 clone 是一个独立的参考。
  • 啊,我明白了@Elliott Frisch 非常感谢!我希望我能给你一张支票/信用,但我的帐户不允许我这样做。我很抱歉,但非常感谢你!
  • @MikeCAT 在哪里比较字符串?阅读问题

标签: java oop boolean


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢您的回答。你真的太棒了!!
【解决方案2】:

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

【讨论】:

  • 非常感谢。你真的太棒了!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
相关资源
最近更新 更多