我是新手。
我读过,局部变量的范围将在一个块内(纠正我,如果我错了)。 在这里,主要方法的局部变量(名单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