【发布时间】:2019-09-13 06:16:39
【问题描述】:
Java 严格按值传递。例如,如果我将一个整数传递给一个更改它的值的方法并且不返回该值,那么 main 方法中的整数将不会被更改。
但是,当我将ArrayList 传递给将项目添加到列表的方法时,结果发现该方法更改了主方法中的 ArrayList。
public class test {
public static void main(String[] args) {
// create a array list
ArrayList<String> item = new ArrayList<String>();
addItems(item);
System.out.println("Items in the main method are: ");
for (int i = 0; i < item.size(); i++) {
System.out.println(item.get(i));
}
System.out.println("\n***************************\n");
int num = 0;
plusOne(num);
System.out.println("The value of num in the main method is: " + num);
}
//add two items to arrayList
public static void addItems(ArrayList<String> item) {
item.add("Item #1");
item.add("Item #2");
System.out.println("Items in the addItems method are: ");
for (int i = 0; i < item.size(); i++) {
System.out.println(item.get(i));
}
}
//add one to num
public static void plusOne(int num) {
num = num +1;
System.out.println("The value of num in the plusOne method is: " + num);
}
}
这是输出:
Items in the addItems method are:
Item #1
Item #2
Items in the main method are:
Item #1
Item #2
***************************
The value of num in the plusOne method is: 1
The value of num in the main method is: 0
这令人困惑。
为什么 addItems() 改变了 item 而 plusOne() 没有改变 num ?
有人可以解释一下吗?谢谢!
【问题讨论】:
-
在对象的情况下,值是引用。 stackoverflow.com/a/40523/5082991
标签: java arraylist methods parameters