gpt4 book ai didi

c# - 在 Java/C# 中,通常什么时候对引用类型变量使用 == 相等性?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:42 24 4
gpt4 key购买 nike

作为标题为“等于和 == 之间的区别”的问题的一种跟进:在哪种情况下您会发现自己在 Java/C# 中测试引用相等性?

最佳答案

合并答案...

When, typically, do you use == equality on a reference typed variable in Java / C#?

<强>1。检查空值:

if (a == null) ...

<强>2。为了在构建 equals 实现时提高效率:

boolean equals(Object o) {
if (o == null) return false;
if (this == o) return true;

// Some people would prefer "if (!(o instanceof ClassName)) ..."
if (getClass() != o.getClass()) return false;

// Otherwise, cast o, leverage super.equals() when possible, and
// compare each instance variable ...

<强>3。当您比较枚举或比较类的对象时为了提高效率,设计为比较对象标识等同于检查对象等效性(例如类对象):

enum Suit { DIAMONDS, HEARTS, CLUBS, SPADES }

class SomeCardGame {
...
boolean static isATrumpCard(Card c) {
return (c.getSuit() == TRUMP_SUIT);
}
}

<强>4。当您真的打算检查对象身份而不是对象等价性时,例如想要确保类不会放弃对内部数据结构实例的引用的测试用例。

boolean iChoseNotToUseJUnitForSomeReasonTestCase() {
final List<String> externalList = testObject.getCopyOfList();
final List<String> instanceVariableValue =
getInstanceVariableValueViaCleverReflectionTrickTo(testObject, "list");
if (instanceVariableValue == externalList) {
System.out.println("fail");
} else {
System.out.println("pass");
}
}

有趣的是,对于第 3 点,一篇文章建议使用 equals 比使用 .equals() 更安全,因为如果您尝试与不属于同一类的对象引用进行比较,编译器会报错(http://schneide.wordpress.com/2008/09/22/or-equals/)。

关于c# - 在 Java/C# 中,通常什么时候对引用类型变量使用 == 相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com