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 次 |
最近记录: |