接着讨论关于字符串的问题,现在有一个程序如下:
public static void main(String[] args) throws Exception{
String str1 = 1 + 2 + "apple";
String str2 = "apple"+1+2;
System.out.println(str1 == "12apple");
System.out.println(str2 == "apple12");
}
那么现在请问程序的运行结果如何?都为 true
?
我们看看运行结果:
false
true
貌似一切都不是我们想象的那么简单,当然也没有想象中的那么复杂。
原来在java中对"+"
的处理机制是在计算表达式的时候,只要遇到String字符串,则所有的数据都会转化为String
类型进行处理,如果是原始类型,就直接拼接,如果是类类型,就调用toString()
方法进行返回值的拼接。
String str = "123";
str = str+new ArrayList();
上面就是通过ArrayList对象的toString()
方法的返回值然后和str
进行拼接。回到我们之前的问题,对于str1
字符串,Java执行顺序是从左到右的,先执行1+2
,然后再和字符串的拼接,结果就是"3apple"
,其形式类似于如下:
String str1 = (1+2)+"apple";
而对于str2
字符串而言,第一个参与运算的是字符串,后面的运算都要转换为字符串类型进行运算,所以加1
的结果就是"apple1"
,然后再加2
,所以最后的运算结果是"apple12"
备注:在"+"
表达式中,String
字符串拥有最高的优先级。