Vex*_*toR 7 java string operator-overloading string-concatenation
Java不能执行运算符重载,但+对于String和Integer其他一些类都可以正常工作.这怎么可能?
更新:
为什么这样做?
Integer i = 4;
Integer p = 5;
System.out.println(i*p); // prints 20
Run Code Online (Sandbox Code Playgroud)
+不是运算符重载的示例.+作为连接运算符和算术加法运算符构建在语言中.
这意味着用Java编写程序的人不能重载操作符,但就Java语言的语法而言,它+被定义为连接和加法运算符.
编辑
它适用于其他类,如Integer和Double由于自动装箱.
如果您查看执行字符串连接的Java程序的字节码,您将看到它创建StringBuilder并使用该append()方法.Java编译器看到+运算符并意识到操作数是字符串而不是基本类型(如int).
如果查看执行整数加法的程序的字节码,您将看到它使用该iadd指令执行整数加法.这是因为编译器意识到操作的+操作数是整数.
至于做类似的事情Integer i = 4,字节码将显示你实际上正在做Integer i = Integer.valueOf(4).这称为自动装箱.后来,当你做这样的事情i + p,其中两个i和p有型的Integer,生成的字节码会告诉你做的i.intValue() + p.intValue(),这里的返回类型的两种方法是int(实际字节码指令再次是iadd).
这就是为什么+工作,Integer即使它们不是真正的原始类型.
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |