【问题标题】:Does referential equality in java imply structural equality for Strings?java中的引用相等是否意味着字符串的结构相等?
【发布时间】:2016-05-09 00:06:57
【问题描述】:

换句话说,如果我有两个变量:

String s;
String t;

这样s == t,那么s.equals(t)是否保证返回true?

我认为答案显然是肯定的,但这是我的教授为入门编程课程期末考试提供的练习考试,他说不是。想法?

我意识到它们可能为 null,因此在引用上是相等的,但您无法对它们调用 .equals

【问题讨论】:

  • 如果他们是null?
  • 考虑两个变量的值是否都是null。我不知道你教授是不是这个意思,但如果不是,他就错了。 Straight from the source.
  • 如果问题不是专门针对Stringnull 的可能性,那么答案可能理论上仍然是否定的。当a == b 为真时,a.equals(b) 不能绝对保证为真,因为equals() 方法的实现者可能搞砸了。不是您的教授正在寻找的答案,而只是想把它放在那里。 ;-)

标签: java string reference equality


【解决方案1】:

== 表示两个对象的指针相同。这意味着对象包含在相同的内存位置。如果这是真的,它们是同一个对象并且必须持有相同的值,所以.equals() 也将是真的。

请注意,相反的情况并非如此 - .equals() 为真并不能保证 == 为真。

唯一的例外是如果您覆盖 .equals() 方法以始终返回 false,或者如果两个对象都是 null

【讨论】:

    【解决方案2】:

    不,这并不意味着相同。

    s1==s2 将返回字符串池上s1s2 上的引用是否相同,而不是它们的内容。

    s1.equals(s2) 将检查字符串s1s2 的内容。

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 2018-11-16
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      相关资源
      最近更新 更多