繁体   English   中英

Java编译器如何实现二进制运算符

[英]How a Java compiler implements binary operators

从在SO的多篇文章中我了解到,Java的编译器实现了操作符对对象的重载,因此当它看到像Integer i = a + b这样的简单表达式时(也让ab也为Integer类型),它将进行编译。它的调用Integer.valueOf()函数(如解释在这里 )。

我想知道Java编译器是如何实现的。 我的意思是,它下面是否有Java C ++ [根据注释编辑]代码,该代码使用简单的运算符重载,因此当看到带有Integer的二进制+运算符时,它将调用valueOf()函数?

另外, 链接出现在一个SO答案中(对不起,我不记得在哪里),我想也许enterBinop部分与该问题有关?

与C ++不同,Java编译器不允许运算符重载。

但是,内置了重载运算符,例如用于添加数字或连接字符串的“ +”。

您可以在Java的最新版本中添加Integer类型的对象的原因是,编译器将执行与原始类型相关的对象的自动装箱和拆箱,例如Integer-> int,Boolean-> boolean等。

因此,当您编写“ a + b”时,编译器将看到变量的类型为Integer并将其取消装箱以自动键入int。 (对此进行了简化以使其易于理解。我不知道Oracle Java编译器是如何做到这一点的。)

请注意,如果这些Integer变量中的任何一个为null,则此方法可以并且将抛出NullPointerException,因为代码就像您所说的那样编译为a.intValue()+ b.intValue()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM