groovy 运算符重载的一个小问题
boolean equals (Object other) { if (null == other) return false //problem!!! }
这上面第二行令我不解,在groovy中一切都是对象,运算符都是对象的方法,那么,这个null是对象?可是我调用 null.class 但是是空指针异常
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一般来说,o1 == o2 等同于 o1.equals(o2), 不过这里的等同,只是一个大致的意思,实际上的逻辑都在 DefaultTypeTransformation.compareEqual(o1, o2) 中实现,因此, o1 == o2 并不是直接解释为 o1.equals(o2), 在具体的实现中,它首先检查了 o1/o2是否是null,因此, null == other也不会产生NPE错误。
看这一类的高级语言中,对运算符来说,一般都有这种说法,但编译器本身或多或少都会做一些优化或特殊处理,如果想要查看到底做了什么特殊处理的话,你需要使用一个反编译工具,来进一步了解。当然,如果能够读懂字节码的话,你就更容易理解了。
对象的空用null表示的,但不代表null就属于对象