gpt4 book ai didi

Java Array/ArrayList 用即将添加的数据替换已在内部的数据

转载 作者:行者123 更新时间:2023-12-02 00:17:07 25 4
gpt4 key购买 nike

我有一个程序调用函数requestAudioBlocks来请求一些数据。在其中,它初始化一个数组,然后调用数据请求。

private ReadAudioData[] receivedAudioMessages;

private int receivedMessageCount;

private boolean requestAudioBlocks(long blocksPerRequest)
{
receivedAudioMessages = new ReadAudioData[2];

receivedMessageCount = 0;

connection.sendRequest(); //Send the command
}

connection.sendRequest运行时,connection.sendRequest调用saveAudioBlocks,向其发送一个变量download,是要放入数组中的。

private ReadAudioData audioDataPacket;

public void sendRequest()
{
ReadAudioData readAudioData;

while (int count = 0; count < 2; count++)
{
readAudioData = new ReadAudioData();

//Add the received information into the readAudioData variable

audioDataPacket = readAudioData;

saveAudioBlocks(audioDataPacket);
}
}

每次接收到新的 ReadAudioData 对象时,都会调用 saveAudioBlocks。

public void saveAudioBlocks(ReadAudioData download)
{
receivedAudioMessages[receivedMessageCount] = download;

receivedMessageCount++;
}

在程序运行过程中,saveAudioBlocks被调用了两次,这应该将两个ReadAudioData对象放入数组receivedAudioMessages中。

它第一次工作,因为正确的ReadAudioData对象进入receivedAudioMessages[0]

ReadAudioData 对象有一个变量字符串,在本例中为“111”。如果您在 saveAudioBlocks 中的 receivedMessageCount++ 行处放置一个断点,您可以查看该数组,它包含带有 String 变量 < 的 ReadAudioData 对象。 strong>“111”,因为它应该位于位置0

但是,当使用新的 ReadAudioData 对象再次调用 saveAudioBlocks 时,如果您在位置 0 处查看 receivedAudioMessages 数组,>ReadAudioData 对象是传递给函数的变量 download 中包含的新 ReadAudioData 对象,该对象包含一个字符串变量“122”。

这几乎就像我在数组中保存一个指向变量download的指针,而不是当前的实际对象。

我也尝试过使用ArrayLists,但出现了同样的问题。

我在saveAudioBlocks处有一个断点,以确保它不会在我不知道的情况下被调用以替换数据,但事实并非如此。

有人可以帮忙吗?

最佳答案

It is almost as if I am saving a pointer to the variable download in the array and not the actual object as it currently is.

这就是发生的事情。您将引用存储到由局部变量download引用的对象。因此,如果该对象的属性发生变化,那么该变化也会在您的数组中变得“可见”。

数组不存储对象本身,而是存储对象的引用。

关于Java Array/ArrayList 用即将添加的数据替换已在内部的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11718482/

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