可能有人对字符串的拼接存在疑问。如下面的:
String a = "test";String b="3";String c=a+b;String d="test"+"3";c和d是否指向的是同一个对象"test3"?
不是指向同一个对象的。假设再有个语句,String e = "test3";因为String是final的,不可修改,所以可以把e看成常量。当再遇到String d="test"+"3"时,编译器在这里做了优化,把这条语句优化为String d="test3",由于存在一个相同的对象e,所以d也指向了e.所以d、e是同一个对象。而编译器在处理String c=a+b时,认为是两个变量相加,不会做优化。所以c,d不是同一个对象。如果将a,b定义为final String a = "test";final String b="3"; 这时String c=a+b就变成了常量相加,所以编译器会对其进行优化,即这时c,d就相等了。