gpt4 book ai didi

java - 为什么我的变量不指向同一个数组?

转载 作者:行者123 更新时间:2023-12-01 17:01:11 24 4
gpt4 key购买 nike

我有两个类。一个具有数组 (ArrayStorage),另一个 (ArrayConsumer) 仅具有一个变量,该变量将充当对数组的简单引用。

我使用 $my_array 将新元素添加到数组中。然后我检查新元素在 $obtained_array 中是否可见。但测试失败,因为它找不到新元素。它们的表现就像是不同的阵列。它们不应该指向同一个数组吗?

public function testArrayMadness() {
$arrayStorage = new ArrayStorage();
$my_array = $arrayStorage->getArray();

$arrayConsumer = new ArrayConsumer($my_array);
$obtained_array = $arrayConsumer->getArray();

$my_array[3]='c';
$this->assertContains('c', $obtained_array);
}
}
class ArrayStorage {
private $my_array=[1=>'a',2=>'b'];
function getArray() { return $this->my_array; }
}
class ArrayConsumer {
private $obtained_array;
function __construct($array) { $this->obtained_array=$array; }
function getArray() { return $this->obtained_array; }
}

更新:我在 Java 中进行了同样的测试,它给了我一个 indexOutOfBoundsException。这是否意味着 php 和 java 在这方面的工作方式相同,还是我的代码有问题?

@Test
public void testArrayMadness() {
ArrayStorage arrayStorage = new ArrayStorage();
List<String> my_list = arrayStorage.getList();

ArrayConsumer arrayConsumer = new ArrayConsumer(my_list);
List<String> obtained_array = arrayConsumer.getList();

my_list.add("c");
assertEquals("c", obtained_array.get(3));
}
}

class ArrayStorage {
private List<String> my_list;
public ArrayStorage() {
my_list = new ArrayList<>();
my_list.add("a");
my_list.add("b");
}
public List<String> getList() { return my_list; }
}
class ArrayConsumer {
private List<String> obtained_list;
public ArrayConsumer(List<String> list) {
this.obtained_list = list;
}
public List<String> getList() { return this.obtained_list; }
}

最佳答案

PHP 数组不是对象,它们是按值分配的:

$a = [1,2,3];
$b = $a;
$b[2] = 99;

print_r($b); // 1,2,99
print_r($a); // 1,2,3

解决方法是使用引用符号 & (通常是个坏主意)或 ArrayObject:

$a = new ArrayObject([1,2,3]);
$b = $a;
$b[2] = 99;

print_r($b); // 1,2,99
print_r($a); // 1,2,99

关于java - 为什么我的变量不指向同一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27553846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com