我们知道,java中是不允许程序员重载任何操作符的,那么String的加法重载是如何实现的呢?

查看String的源代码,没法发现任何关于加法重载的线索。

查找相关书籍,找到以下一段说明:

   用于String的“+”与“+=”是java中仅有的两个重载过的操作符

看来确实发生了重载,那究竟是在哪里实现重载的呢?看一下下面的例子

  1. String s1 = "foo";  
  2. String s2 = "bar";  
  3. String s3 = s1 + s2;

下面我们将这个代码编译成class文件并反编译,我们得到反编译后的代码如下:

  1. String s = "foo";  
  2. String s1 = "bar";  
  3. String s2 = (new StringBuilder()).append(s).append(s1).toString();

可以看出,重载的事编译器帮我们给做了。

虽然这个唯一的加法重载增加了语言的可读性,但无疑也提高的java语言的学习成本。

关于编译器如何实现的,后续将进行补充。