Java数组移位引用
我尝试移动数组,但遇到问题 移动数组的代码如下所示:Java数组移位引用,java,arrays,pointers,Java,Arrays,Pointers,我尝试移动数组,但遇到问题 移动数组的代码如下所示: for(int i = (size - 1); i >= 0; i--) { data2[i+1] = data2[i]; } 数组初始化(从另一个数组复制) 数据2[0]:6---3---0---0 数据2[1]:6---3---0---0 数据2[2]:4---8---0---0 数据2[3]:9---5---0---0 我正在将第一个数组复制到第二个数组,因为数据[]是在另一个类中生成的,该类从0->size生成,而我需
for(int i = (size - 1); i >= 0; i--)
{
data2[i+1] = data2[i];
}
数组初始化(从另一个数组复制)
数据2[0]:6---3---0---0
数据2[1]:6---3---0---0
数据2[2]:4---8---0---0
数据2[3]:9---5---0---0
我正在将第一个数组复制到第二个数组,因为数据[]是在另一个类中生成的,该类从0->size生成,而我需要1->size+1用于程序的这一部分
-为清晰起见编辑-
完整伪代码:
obj[] data = new obj[size];
obj[] data2 = new obj[size + 1];
for(int i = (size - 1); i >= 0; i--)
{
data2[i+1] = data2[i];
}
for(int i = 1; i <= size; i++)
{
data2[i] = data[i-1];
}
data2[0] = data[0];
// print data2 0->3
// change data2[0] value
// print data2 0->3, values would have changed for data[0] and data[1]
// but I only want to change values for data[0] and not data[1]
obj[]数据=新的obj[size];
obj[]数据2=新obj[尺寸+1];
对于(inti=(大小-1);i>=0;i--)
{
数据2[i+1]=数据2[i];
}
对于(int i=1;i 3
//更改数据2[0]值
//打印数据2 0->3,数据[0]和数据[1]的值可能已更改
//但我只想更改数据[0]的值,而不想更改数据[1]
新数据2[]引用旧数据[],因此旧数据中的更改将反映在新数据中。
如果你不想那样用
data[index] = new obj(data[i-1]) ;
这将创建一个新对象,它基本上是旧对象的副本,并且相互排斥。新数据2[]引用旧数据[],因此旧数据中的更改将反映在新数据中。 如果你不想那样用
data[index] = new obj(data[i-1]) ;
这将创建一个新对象,它基本上是旧对象的副本,并且相互排斥。首先,让我澄清一些概念。
obj
是一种引用类型。引用类型的变量包含对实际对象的引用。当您执行aRefVariable=anotherRefVariable
时,您不是crea设置一个新对象。相反,您说的是,aRefVariable
应该与另一个refvariable保持相同的引用。基本上,这两个变量在执行该行后指向同一个对象
问题在于这一点:
data2[i+1] = data2[i];
data2[i+1] = data2[i];
您是说data2[i+1]
应该与data2[i]
保持相同的引用
为了简化这种情况,我们假设i
为0,那么现在该行变为:
data2[1] = data2[0];
正如我所说,data2
的第二个和第一个元素现在指向同一个对象。就您得到的对象而言,访问data2[0]
与data2[1]
完全相同
很好,让我们修改data2
的第一项所包含的对象:
data2[0].setElementTwo(3);
现在,data2[0]
正在引用的对象已被修改。当您尝试访问data2[1]
时,您也会看到修改。为什么?因为data2[0]
和data2[1]
引用了相同的内容
要解决此问题,您需要替换此行:
data2[i+1] = data2[i];
data2[i+1] = data2[i];
比如说:
data2[i+1] = new obj(...);
// you should create a new obj that has the same values as data2[i] using its constructor
首先,让我澄清一些概念。
obj
是一种引用类型。引用类型的变量包含对实际对象的引用。当您执行aRefVariable=anotherRefVariable
时,您并不是在创建新对象。相反,您是说aRefVariable
应该包含与anotherRefVar相同的引用基本上,这两个变量在执行该行后指向同一个对象
问题在于这一点:
data2[i+1] = data2[i];
data2[i+1] = data2[i];
您是说data2[i+1]
应该与data2[i]
保持相同的引用
为了简化这种情况,我们假设i
为0,那么现在该行变为:
data2[1] = data2[0];
正如我所说,data2
的第二个和第一个元素现在指向同一个对象。就您得到的对象而言,访问data2[0]
与data2[1]
完全相同
很好,让我们修改data2
的第一项所包含的对象:
data2[0].setElementTwo(3);
现在,data2[0]
正在引用的对象已被修改。当您尝试访问data2[1]
时,您也会看到修改。为什么?因为data2[0]
和data2[1]
引用了相同的内容
要解决此问题,您需要替换此行:
data2[i+1] = data2[i];
data2[i+1] = data2[i];
比如说:
data2[i+1] = new obj(...);
// you should create a new obj that has the same values as data2[i] using its constructor
从问题中不清楚这些变量中的大多数被初始化为什么以及它们在代码序列中的什么位置被操纵。也要清楚地说明你试图实现什么。从问题中不清楚这些变量中的大多数被初始化为什么以及它们在代码序列中的什么位置被操纵。还要清楚地说明什么你正在努力实现。