【发布时间】:2012-03-26 19:39:04
【问题描述】:
所以长话短说。一位教授在课堂上提出了这个问题作为讨论的开始。除了明显的
B = new SomeClass("B"); // But B can be null, can can be new SomeClass("A");
A = new SomeClass("A");
A==B
比较时会保证没有NPE,用B==A代替A==B的原因是什么?
其中 A 和 B 属于同一类型,这与语言无关。因此,您可以假设 Java 为 A.equals(B),或 C 或 C++ 等中的等效语法......
不,这不是家庭作业。
【问题讨论】:
-
每个场景和语言都有非常不同的答案。
-
使用
==(假设它没有重载)不会抛出C#。 -
为什么这会同时标记 Java 和 C#?在 Java 中,
==永远不会抛出 NEP。 -
很多时候,如果 B 是常数,人们会做 B==A。这背后的想法是,捕捉您不小心在语句中放置一个“=”的情况,从而导致分配而不是检查。在某些语言中,运行的代码最终可能会有所不同,具体取决于您是否执行 A==B 或 B==A(想想 A 和 B 是两种不同的类型,它们都具有 == 运算符重载,或者是否通过 .Equals 实现, A 和 B 可能有不同的 .Equals()。
-
@NullUserException 可能与这个问题无关,但是当涉及自动装箱/拆箱时,Java
==可以抛出 NPE。
标签: c# java programming-languages