操作符“+” 能够连接字符串,并生成新的字符串。
如果 “+” 操作符中有一个操作元为 String 类型,则另一个操作元可以是任意类型(包括基本类型和引用类型),不过该操作元将被转换成字符串。当一个操作元为String 类型时,如果另一个操作元为引用类型,就调用所引用对象的 toString() 方法。来获得字符串。
String s1 = "Age: " + 1 + 2; //s1 的内用为 Age: 12
String s2 = "Age: " + "5"; //s2 的内容为 Age: 5
String s3 = "Age: " + new Integer(18); //s3 的内容为 Age: 18,调用 Integer 的 toString() 方法
String s4 = "Answer: " + true; //s4 的内容为 Answer: true
//s5 的内容为 Answer: false,调用 Boolean 对象的 toString() 方法
String s5 = "Answer: " + new Boolean("false");
Object obj = null;
String s6 = "Answer: " + obj; //s6 的内容为 Answer: null
在 java.lang.Object 类中定义了 toString() 方法,因此所有的 Java 类都有这一个方法。
如果 “+” 操作符的两个操作元都不是 String 类型,那么 “+” 操作符的两格操作元必须都是除 boolean 以外的基本数据类型,此时 “+” 作为数学加法操作符处理。
对于包含多个 “+” 操作符的表达式,Java 根据 “+” 的左结合性特点,从左边开始计算表达式。根据操作元的类型来决定 “+” 字符串连接操作符还是数学加法操作符。
eg:
System.out.println(5+1+"1"+new Integer(1)+2+4+new Long(11));
结果为6112411
System.out.println(5+new Boolean(true)+2+4+new Long(11)); //编译错误
因为 5 和 Boolean 对象之间既不能进行数学加法运算,也不能进行字符串连接运算,所以编译出错。
在JDK 1.5 中,允许数字基本类型与数字包装类型进行混合数学运算。eg:“1+new Integer(2)+2”,在JDK 1.5 中是合法的。
值得注意的是,除了 “+” 能用于字符串的连接以外,其他操作符(如“-”、“&”和“&&”等)都不支持 String 类型的操作元。