我不明白 Java 是如何按值传递的
I don't understand how Java is pass by value
所以我认为Java是按值传递但是为什么下面的代码:
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
phase1(numbers);
for (Integer number: numbers) {
System.out.println("number = " + number);
}
}
static void phase1(List<Integer> numbers) {
numbers.remove(0);
}
打印以下内容?
number = 2
number = 3
So I thought Java was pass by value
是。
...but why does the following code...print the following?
因为为引用类型传递的值是引用,而不是对象的副本。
"Pass by reference" 指的是一个 完全不同的东西 ,传递对 变量 的引用。 Java 没有。
如果 Java 有传递引用,那么对您的方法进行此更改:
static void phase1(List<Integer> &numbers) {
// Pass-by-reference indicator --^--- that Java doesn't actually have
numbers = new ArrayList<Integer>()
}
...将使您的代码根本不打印任何数字。但是没有,所以没有。
将对象引用视为 int
或 long
,它唯一标识内存中其他地方的对象。 (基本上就是这样。)正如 a = b
和 int
的 将 b
的值复制到 a
,所以a = b
copy b
的 value 到 a
中,即使值是一个对象引用。被复制的值是引用,而不是它引用的对象。
所以我认为Java是按值传递但是为什么下面的代码:
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
phase1(numbers);
for (Integer number: numbers) {
System.out.println("number = " + number);
}
}
static void phase1(List<Integer> numbers) {
numbers.remove(0);
}
打印以下内容?
number = 2
number = 3
So I thought Java was pass by value
是。
...but why does the following code...print the following?
因为为引用类型传递的值是引用,而不是对象的副本。
"Pass by reference" 指的是一个 完全不同的东西 ,传递对 变量 的引用。 Java 没有。
如果 Java 有传递引用,那么对您的方法进行此更改:
static void phase1(List<Integer> &numbers) {
// Pass-by-reference indicator --^--- that Java doesn't actually have
numbers = new ArrayList<Integer>()
}
...将使您的代码根本不打印任何数字。但是没有,所以没有。
将对象引用视为 int
或 long
,它唯一标识内存中其他地方的对象。 (基本上就是这样。)正如 a = b
和 int
的 将 b
的值复制到 a
,所以a = b
copy b
的 value 到 a
中,即使值是一个对象引用。被复制的值是引用,而不是它引用的对象。