74
|
polygenelubricants · 技术社区 · 15 年前 |
![]() |
1
104
关于这种不对称性是否不一致的问题,我想不是,我请你参考一下这个古老的禅堪:
这时,编译器达到了启蒙。 |
![]() |
2
19
一个例外真的应该是 情况。空指针可能不是程序员错误。
|
![]() |
3
8
想一想.equals是如何与==相关的,而.compareTo是如何与比较运算符>,<=,<=相关的。 如果您认为使用.equals将一个对象与null进行比较应该引发一个NPE,那么您必须说这段代码也应该抛出一个NPE:
o1.equals(o2)和o2.equals(o1)之间的区别在于,在第一种情况下,你将一些东西与null进行比较,类似于o1==o2,而在第二种情况下, equals方法从未实际执行过 关于.compareTo协定,将非null对象与null对象进行比较就像尝试执行以下操作:
显然这无法编译。可以使用自动取消装箱使其编译,但在进行比较时会得到一个NPE,这与.compareTo协定一致:
|
![]() |
4
4
这并不是一定要回答你的问题,这只是一个例子,说明我觉得现在的行为是有用的。
这是一个足够的理由让这种行为保持原样吗??我不知道,但这是一个有用的副作用。 |
![]() |
5
4
如果将面向对象的概念考虑在内,并考虑整个发送方和接收方角色,我认为行为是方便的。在第一个例子中,你在问一个对象,他是否等于任何人。他应该说“不,我没有”。 在第二种情况下,你没有提到任何人,所以你并没有真正问任何人。这应该引发一个异常,第一个案例不应该。
最后一点。当代码中有错误时,应该引发空指针异常。然而,询问一个对象是否是无名小卒,不应被视为编程缺陷。我认为询问一个对象是否为空是完全可以的。如果您不控制为您提供对象的源代码怎么办?这个消息源发送给你空值。你会检查对象是否为空,然后再检查它们是否相等?如果只是比较二者,那么第二个对象是什么,那么比较将毫无例外地进行,这不是更直观吗? 老实说,如果equals方法的主体中故意返回空指针异常,我会很生气的。Equals是用来对付任何类型的对象的,所以它不应该对接收到的内容如此挑剔。如果一个equals方法返回npe,我最不愿意想到的是它是故意这样做的。特别考虑到这是一个未经检查的异常。如果你真的提出了一个npe,一个人必须记住在调用你的方法之前总是检查null,或者更糟的是,在try/catch块中把调用围成equals(上帝,我讨厌try/catch块),但是哦,好吧。。。 |
![]() |
6
2
就我个人而言,我更希望它能像现在这样表现。
这个
|
![]() |
7
2
扔也不是个好主意
|
![]() |
8
2
有很多常见的情况
至于为什么
同时,如果两个对象都是未知的空值,那么其他代码几乎肯定需要至少检查其中一个对象,否则在不冒
因为这是它的指定方式,所以违反契约并为
|
![]() |
9
1
|
![]() |
10
1
我认为这是为了方便,更重要的是一致性——允许null作为比较的一部分,从而避免了
|
![]() |
11
0
这是个棘手的问题。对于向后兼容,您不能这样做。
现在with equals返回false else子句将被执行,但在引发异常时不会执行。 同样null也不等于说“2”,所以返回false是非常有意义的。那么坚持一下可能更好null.等于(“b”)返回也为false:) 但这一要求确实形成了一种奇怪的、非对称的等号关系。 |
![]() |
12
0
你应该回来
要证明这是标准,请参见'
这也可以处理两个
|
|
user29759326 · 如何返回递归函数中的最后一个值? 7 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 7 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 7 月前 |
![]() |
rudraraj · java中未声明最终变量 8 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 8 月前 |