public class Test {
public static void main(String[] args) {
String str="a";
StringBuffer sb=new StringBuffer("a");
// process(str);//a
// System.out.println(str); //a
process(sb);
System.out.println(sb);
// process(str,sb);
// System.out.println("str:"+str);//a
// System.out.println("sb:"+sb);//aA
}
private static void process(String str, StringBuffer sb) {
System.out.println(str);//a
str=new String("A");//改變的是局部變量的值
sb.append("A");//不僅改變了局部變量的值 還改變了原來的全局變量的值
System.out.println("method str:"+str);//A
System.out.println("method sb:"+sb);//aA 因爲StringBuffer沒有重新new 所以這次改變還是在之前的sb之上
}
private static void process(String str) {
str="A";//改變的是局部變量的值
System.out.println("str:"+str);//str:A
}
private static void process(StringBuffer sb) {
sb=new StringBuffer();
sb.append("A");
System.out.println(sb);
}
/**
*
* String 不管有沒有new 都不是是同一個String
* String對象相當於一個常量,一旦產生後就不可以修改,重新賦值其實就是兩個對象
* String是對象 不是原始類型
* 爲不可變對象,一旦被創建,就不能修改它的值
* 對於已經存在的String對象的修改都是重新創建一個新的對象,然後把新的值保存進去
* String是final類 不能被繼承
*
* StringBuffer 只要沒有重新new 則始終是同一個
* StringBuffer 是一個可變對象,當對他進行修改時不會像String那樣重新建立對象,它只能根據構造函數來建立
* StringBuffer sb=new StringBuffer();
*
*
*
*/
}