java字符串值传递注意事项
public class StringTest {
String str = new String("good");
char[] ch = { 't', 'e', 's', 't' };
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'b';
}
public static void main(String[] args) {
StringTest ex = new StringTest();
ex.change(ex.str, ex.ch);
System.out.println(ex.str);// good
System.out.println(ex.ch);// best
}
}
内存解析:
注意点,String也是引用类型,且Sting类是final类。在此例中,ch指向ex.ch,两个地址值相同,都指向堆空间中的同一块区域,所以ch能修改对空间中的数组;但是方法体的str虽然最开始是指向ex.str,但是str="test ok"
时,str的地址值就发生了改变,就像下面例子:
String s1 = "abc";
String s2 = s1; // 此时s1和s2地址相同
s2 = "sb" ; // 此时s2地址已经发生变化;常量池会新开辟一个 “sb” 的空间
System.out.println(s1); // "abc"
System.out.println(s2); // "sb"
而上述例子的ex.ch数组发生了变化是因为他不是final
修饰的,即在值传递时注意字符串String类是final类型的