groovy 运算符重载的一个小问题

发布于 2021-11-05 03:16:57 字数 224 浏览 838 评论 2

boolean equals (Object other) {
		if (null == other) return false  //problem!!!
	}

这上面第二行令我不解,在groovy中一切都是对象,运算符都是对象的方法,那么,这个null是对象?可是我调用 null.class 但是是空指针异常

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2021-11-08 20:59:06

一般来说,o1 == o2 等同于 o1.equals(o2), 不过这里的等同,只是一个大致的意思,实际上的逻辑都在 DefaultTypeTransformation.compareEqual(o1, o2) 中实现,因此, o1 == o2 并不是直接解释为 o1.equals(o2), 在具体的实现中,它首先检查了 o1/o2是否是null,因此, null == other也不会产生NPE错误。

看这一类的高级语言中,对运算符来说,一般都有这种说法,但编译器本身或多或少都会做一些优化或特殊处理,如果想要查看到底做了什么特殊处理的话,你需要使用一个反编译工具,来进一步了解。当然,如果能够读懂字节码的话,你就更容易理解了。

辞别 2021-11-08 18:00:23

对象的空用null表示的,但不代表null就属于对象

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文