我是新手。
我讀過,局部變量的範圍將在一個塊內(糾正我,如果我錯了)。 在這裏,主要方法的局部變量(名單li
和li1
和StringBuffer的y
)表現得像個實例變量,而這些變量(字符串y1
和int x
)行爲類似於局部變量。爲什麼?帶有列表,字符串和字符串緩衝區的局部變量行爲
public class Test {
public static void addValues(ArrayList<String> list, StringBuffer sb, int x){
list.add("3");
list.add("4");
list.add("5");
sb.append("String Buffer Appended !");
x=x+10;
}
public static void addValues(ArrayList<String> list, String sb, int x){
list.add("3");
list.add("4");
list.add("5");
sb = sb + "is Appended !";
x=x+10;
}
public static void main(String[] args) {
ArrayList<String> li = new ArrayList<>();
ArrayList<String> li1 = new ArrayList<>();
StringBuffer y=new StringBuffer("ab");
int x=10;
String y1=new String("ab");
li.add("1");
li.add("2");
li1.add("1");
li1.add("2");
System.out.println("b4 : "+li+" , y = "+y+" , y1 = "+y1+" x= "+x);
addValues(li,y,x);
System.out.println("Af : "+li+" , y = "+y+" x= "+x);
addValues(li1,y1,x);
System.out.println("Af : "+li1+" , y1 = "+y1+" x= "+x);
}
}
輸出:
b4 : [1, 2] , y = ab , y1 = ab x= 10
Af : [1, 2, 3, 4, 5] , y = abString Buffer Appended ! x= 10
Af : [1, 2, 3, 4, 5] , y1 = ab x= 10
另請參閱http://stackoverflow.com/questions/4658453/difference-between-mutable-objects-and-immutable-objects –
對不起,發佈此作爲答案,因爲我的聲譽確實不允許我評論你的問題。但這個問題被多次詢問。在這裏,檢查[this](https://stackoverflow.com/questions/15871825/why-is-an-arraylist-parameter-modified-but-not-a-string-parameter),[this](https:// stackoverflow.com/questions/8798403/string-is-immutable-what-exactly-is-the-meaning)和[this](https://stackoverflow.com/questions/40480/is-java-pass-by-reference -or通按值) – epipav