在Java语言中,操作符重载是不被允许的。尽管操作符重载会提高项目的灵活性,但是会提高项目的复杂性,可读性也大大降低。操作符重载与Java的设计思想(严格的面向对象)相悖。
但是对String对象而言,它是可以直接+
将两个String对象的字符串值相加。乍看起来这是对+
的重载,但我们可以通过class文件看出,这只是JVM做的语法糖。
来看一个简单的例子:
public class A{
public static void main(String[] args){
String a = "1";
String b = "2";
System.out.println(a+b);
}
}
我们运行一下,结果是12
,没什么问题。
反编译一下这个java文件:
javap -c A.java

暂且不管左边那些汇编啥意思,单看右边的注释
- 9:新建了一个StringBuilder对象
- 17和21:两次append()
- 24:springBuilder.toString()方法
所以说,String的+
操作根本不是重载,他只是JVM做的有个简化操作,实际上还是调用了StringBuilder进行相加。
在阿里巴巴编码规约中有明确提到,推荐在循环时的字符拼接采用StringBuilder.append()
方法而不是+
。因为循环使用+
会最终导致创建多个StringBuilder
对象,造成资源浪费。