java在原语数组中重新分配数组值不会更改数组
我尝试用2个循环设置2D布尔数组的值,如下所示:
boolean[][] frame = new boolean[10][4];
for (boolean[] column : frame)
for (boolean b : column)
b = true;
但这似乎不起作用,所有的布尔人都是假的,为什么
你可以在下面搜索框中键入要查询的问题!
我尝试用2个循环设置2D布尔数组的值,如下所示:
boolean[][] frame = new boolean[10][4];
for (boolean[] column : frame)
for (boolean b : column)
b = true;
但这似乎不起作用,所有的布尔人都是假的,为什么
# 1 楼答案
不能为数组中的对象指定新值,因为原始对象不会更改。下面的代码将完成此任务
再解释一下:
数组包含指向布尔的元素。将数组元素之一的值赋给名为b(
for (boolean b : column)
)的变量时,变量b
指向数组元素指向的同一对象。接下来,将变量b
指向true
。现在,b将是真的。但是,数组中的元素仍然指向同一对象我希望这一点现在已经清楚了。图像会让它更容易理解
# 2 楼答案
因为您正在重新分配
b
,它是column[i]
的副本,而不是column[i]
本身。Java中的原语是(或者至少是“最好的想法”)通过值传递/复制的,而不是通过引用更准确地说,Java是引用的传递值,它抛弃了业余的“传递值”/“传递引用”二分法。对于原语,我不知道“严格地说”它们是否是值,但它们是不可变的,所以在这种情况下没有语义上的区别。e、 g
理解这些代码,你就会明白你的问题所在