【发布时间】:2011-05-18 03:29:34
【问题描述】:
可能的重复:
Using == or Equals for string comparison
Are string.Equals() and == operator really same?
我首先学习了 Java,并且为数不多的绝对原则之一是您永远不会使用 == 来比较两个字符串是否相等,而是使用 equals 方法。所以当我几年前接触 C# 并注意到对象仍然有一个 Equals 方法时,我认为该规则仍然适用。
现在我正在查看一位前同事的代码,我发现到处都是这样的 sn-ps:
if (s.Substring(0, s.IndexOf("_")) == "GBCI") {...}
如果我没记错的话,== 将比较这两个结果之间的地址,并且由于前半部分是由函数返回的,因此这将失败,因为结果与右侧的常量地址不同。
我是否坚持旧的 Java 习惯?还是我的同事不在身边是件好事?
附:无论您对比较字符串的回答如何,我确实意识到将上述内容表述为s.BeginsWith("GBCI") 会更好,但这完全是另一回事。
【问题讨论】:
-
关于 PS。如果 (s.BeginsWith("GBCI_") == true)。这好多了。
-
甚至
if (s.BeginsWith("GBCI_")) -
我更喜欢 BoltClock 的方式。如果它返回一个布尔值,为什么要将它与一个布尔值进行比较以获得另一个布尔值? 'x == true' 行将返回与简单的 'x' 完全相同的东西(当然,x 是布尔值)
-
哦,我看到你改变了什么,主要是常量字符串中的 _ 。我当然明白为什么你认为它应该在那里,但你不知道(我也不会为此责备你)下划线并不重要。有问题的字符串以 GBCI 或 CSB 开头,只需要找出哪个。