我对使用按值传递的 Java 概念有疑问。我用 C 语言做了很多编程,但我对 Java 非常缺乏经验,所以我一直在编写一些代码来了解更多关于它的知识。我已经阅读了许多关于是否存在任何按引用传递的堆栈溢出问题,答案似乎是 Java 总是使用按值传递(略有偏差是它按值传递对对象的引用)。
考虑到这一点,我设法正确地混淆了自己,我不明白以下示例如何成为按值传递的实例。对于我不理解的内部 Java 工作原理,我将不胜感激。
我有以下代码:
byte[] myByteArray = {23, 45, 67};
myHashMap.put(myKey, new TestClass(100, myByteArray, myOtherByteArray));
Arrays.fill(myByteArray, (byte)0);
myHashMap
aConcurrentHashMap
和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;
}
}
当我使用调试器单步执行代码时,我可以看到存储在(以及随后在)中的byte1
变量被调用更改了,我的问题是......为什么?TestClass
ConcurrentHashMap
Arrays.fill
当实例化一个新的TestClass
时,我不是myByteArray
按值传递吗?