【发布时间】:2013-06-25 11:15:40
【问题描述】:
请帮助理解这种行为。当我使用这个时:
bool a1 = (object)("string" + 1) == ("string" + 1);
结果是false
但是当我使用这个时
bool a2 = (object)("string" + "1") == ("string" + "1");
结果是true
那么,为什么是a1 != a2?
【问题讨论】:
-
我不知道确切的原因,但我知道你不应该使用 "==" 来检查字符串质量。 object1.equals(object2) 至少在我看来是这样。不过,我没有将此作为答案发布,因为它可能无法回答您的问题。
-
@Ricky Mutschlechner:AFAIK 运算符 '==' == '.equals'。 ;-)
-
@RickyMutschlechner 在 C# 中,
==适用于比较字符串,只要它们都被视为字符串 - 当您处理转换为的字符串时,这只是一个时髦的情况对象。但是"string" + 1 == "string1"仍然返回 true。您真正需要使用的是Javaequals。我在 .NET 中避免使用Equals的最大原因是您必须每次都检查第一个是否为 null,以避免 NullReferenceException,其中使用==可以很好地比较 null。 -
@FabianBigler 很高兴知道!我绝对是最近刚开始使用 C# 的 Java 用户,但这绝对是我要记住的。感谢分享!
标签: c# .net string compiler-construction concatenation