【发布时间】:2013-09-07 20:00:47
【问题描述】:
我有一个关于 Java 使用传递值的概念的问题。我用 C 语言做了很多编程,但我对 Java 非常缺乏经验,所以我一直在编写一些代码来了解更多关于它的知识。我已经阅读了许多关于是否存在任何按引用传递的堆栈溢出问题,答案似乎是 Java 总是使用按值传递(略有偏差是它按值传递对对象的引用)。
考虑到这一点,我设法正确地混淆了自己,我不明白以下示例如何成为按值传递的实例。对于我不理解的内部 Java 工作原理,我将不胜感激。
我有以下代码:
byte[] myByteArray = {23, 45, 67};
myHashMap.put(myKey, new TestClass(100, myByteArray, myOtherByteArray));
Arrays.fill(myByteArray, (byte)0);
其中myHashMap 是ConcurrentHashMap,TestClass 已定义:
public class TestClass
{
public final int number;
public final byte[] byte1;
public final byte[] byte2;
public TestClass(int a, byte[] b, byte[] c)
{
number = a;
byte1 = b;
byte2 = c;
}
}
当我使用调试器单步执行代码时,我可以看到存储在TestClass(以及随后在ConcurrentHashMap)中的byte1 变量被Arrays.fill 调用更改,我的问题是.. 。 为什么?
当实例化一个新的TestClass 时,我不是按值传递myByteArray 吗?
【问题讨论】:
-
Is Java "pass-by-reference"? 的可能重复项
标签: java pass-by-reference pass-by-value