因此,当我还是个新手时,与现在的新手相比,我曾经认为这两个东西是彼此的语法糖,即使用一个而不是另一个只是个人喜好。随着时间的推移,我发现这两者不是一回事,即使在默认实现中也是如此(请参阅this http://web.archive.org/web/20081205081158/http://blogs.msdn.com:80/jmstall/archive/2005/03/06/386064.aspx and this http://web.archive.org/web/20090710210823/http://blogs.msdn.com:80/jmstall/archive/2005/03/12/394645.aspx)。为了进一步混淆问题,每个都可以单独覆盖/重载以具有完全不同的含义。
这是一件好事吗?有什么区别?何时/为什么应该使用其中一个而不是另一个?
string x = "hello";
string y = String.Copy(x);
string z = "hello";
测试是否x
指向同一个对象y
:
(object)x == (object)y // false
x.ReferenceEquals(y) // false
x.ReferenceEquals(z) // true (because x and z are both constants they
// will point to the same location in memory)
测试是否x
具有相同的字符串值y
:
x == y // true
x == z // true
x.Equals(y) // true
y == "hello" // true
请注意,这与 Java 不同。
在Java中==
运算符没有重载,因此 Java 中的一个常见错误是:
y == "hello" // false (y is not the same object as "hello")
对于 Java 中的字符串比较,您需要始终使用.equals()
y.equals("hello") // true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)