java - 有人能解释一下 java 是如何仅在以下情况下按值传递的吗

标签 java pass-by-reference pass-by-value

当我拿一个数组时,是这样的:

int anArray[] = new int[5];
//initialize to 0

doStuff(anArray);

//inside doStuff
anArray[3] = 731;
//passes back to main

System.out.println(anArray[3]); // outputs 731

这不是引用传递吗?给了什么?

最佳答案

像数组这样的引用类型仍然被认为是按值传递,因为您传递的是引用值的副本。请注意,您没有传入实际的引用句柄。也就是说,您的 doStuff 方法不能像按引用传递语义那样更改对 anArray 的引用。一个例子应该有助于理解差异:

int anArray[] = new int[] { 99, 100};

doStuff(anArray);
...

//inside doStuff 
anArray = new int[] { 68, 69};

...
// back in anArray's original scope
System.out.println(anArray[1]); // still outputs 100, not 69

关于java - 有人能解释一下 java 是如何仅在以下情况下按值传递的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7225553/

相关文章:

java - 如何在运行时更改 Camel quartz 时间

java - Hibernate Elasticsearch 与 wildfly 14 兼容

java - Liferay Maven 服务构建器失败

c++ - 无法将 std::array 容器拆分为 2 个子部分

c++ - 常量引用如何工作?

Java - 按值传递 - 垃圾收集

Java 按值传递和按引用传递

java - maven java.lang.NoClassDefFoundError : nu/pattern/OpenCV error

php - 在 PHP 中通过空引用传递

c++ - Qt:信号槽通过常量引用传递