String类型变量赋初值后,调用一个方法, 该方法对参数赋值,如下:
class StringTest{
public static void main(String[] args) {
String s="abc";
System.out.println(s);
test(s);
System.out.println(s);
}
public static void test(String a){
a="def";
}
}
结果为:
调用了test方法后s变量的值并未变,这是因为调用test方法用了值传递,即将变量s的副本传递给形参a,而变量s的值不会变。
同样,如果变量s是通过 String s = new String("abc") 实例化再调用test方法也一样。
String a="abc";
String b="ab"+"c";
System.out.println(a==b);
String c = "a";
String d = "bc";
String e = c+d;
System.out.println(a==e);
结果为 :
true
false
因为String b = "ab" + "c" 编译时会立即自动将“ab"与"c"连接,故在内存中变量a和b会指向相同的地址,因此a==b;
而在String e = c + d 编译时,c和d均为变量,内存指向未知,两者不能立即直接连接,因此变量a和e在内存的指向不一样,因此a != e。