"+"在java中是一个很特殊的操作符。
它对于String有特殊作用,当“+”用于String时,这个操作符会将前后两个串串连起来,返回一个新串,
如:
String s = "a" + "b";这个操作符只对String有意义,对其他类型没有意义,如果“+”的左操作数和右操作数都不是String,那么编译器是不会承认的,
如:
String s = new Integer(1) + new Object();如果“+”的左右操作数中有一个是String,就会进行拼字符串的操作,对于不是String的那个操作数,会先调用他的toString()方法,然后在做字符串相加;
如:
Object o = new Object();
String s = "str" + o;
实际上编译后,会变成:
String s = "str" + o.toString();

解决方案 »

  1.   

    这个看source是看不出来的,具体应该是在很底层的地方被动了手脚,我甚至可以明确的告诉你很多操作符都是被重载过了的具体的例子:double a = Double.NaN;System.out.println(a == a);
    System.out.println(a > a);
    System.out.println(a < a);三个都是false, 只有操作符被重载过了,才可能会出现这样的结果。对于这个,你不必锱铢必较。只要记住,java中不允许你对operator重载。但是在底层已经这样做了,而且他们对它们重载,必然有其道理,