看了一下上面的回答,都回答很正确,不过这个问题我以前也迷惑过,所以我再来解释一下吧:
class Demo {
public static void main(String[] args) {
String s = "welcome";
s += " to";//这里如楼上所说,是创建了一个新的对象s ,而这个s的值是 welcome to
//接下来,你的代码是s.concat(" java"),这里意思是把 welcome to 连上java,这里其实又创建了一个新的对象
//s = s.concat(" java");//注意我这里和你的源代码的区别,我在这里相当创建一个新对象,并把这个值赋给了S,打印S,就得到
//welcome to java,而你的代码s.concat("java")确实加了java,但这是一个新的对象,但是你并没有赋值给s,所以打印的结果当然是
//你之前的对象s 啊,也就是welcome to.
s = s.concat(" java");
System.out.println(s);//打印结果是welcome to java
System.out.println(s.concat(" 2java"));//至于这个,因为你打印的就是s.concat(" 2java")),当然能打印出来啊
}
} |