我们知道,java中是不允许程序员重载任何操作符的,那么String的加法重载是如何实现的呢?
查看String的源代码,没法发现任何关于加法重载的线索。
查找相关书籍,找到以下一段说明:
用于String的“+”与“+=”是java中仅有的两个重载过的操作符
看来确实发生了重载,那究竟是在哪里实现重载的呢?看一下下面的例子
- String s1 = "foo";
- String s2 = "bar";
- String s3 = s1 + s2;
下面我们将这个代码编译成class文件并反编译,我们得到反编译后的代码如下:
- String s = "foo";
- String s1 = "bar";
- String s2 = (new StringBuilder()).append(s).append(s1).toString();
可以看出,重载的事编译器帮我们给做了。
虽然这个唯一的加法重载增加了语言的可读性,但无疑也提高的java语言的学习成本。
关于编译器如何实现的,后续将进行补充。