作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我认为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?
因为为引用类型传递的值是引用,而不是对象的副本。
“按引用传递”指的是完全不同的事物,传递对变量的引用。 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
复制 b
的 值 到 a
即使该值是对象引用。被复制的值是引用,而不是它引用的对象。
关于java - 我不明白Java是如何按值传递的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010252/
我是一名优秀的程序员,十分优秀!