Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将值设置为sam对象时替换的列表值_Java_List - Fatal编程技术网

Java 将值设置为sam对象时替换的列表值

Java 将值设置为sam对象时替换的列表值,java,list,Java,List,当我将值设置为另一个列表时,列表值被替换。 请帮帮我 public void testValue(){ invInTc1 = new ArrayList<>(); invInTc2 = new ArrayList<>(); InvInTc invIn = new InvInTc(); invIn.setInvInTcKey("1234"); invIn.setInvInTcQty(1); /

当我将值设置为另一个列表时,列表值被替换。 请帮帮我

public void testValue(){
        invInTc1 = new ArrayList<>();
        invInTc2 = new ArrayList<>();

        InvInTc invIn = new InvInTc();
        invIn.setInvInTcKey("1234");
        invIn.setInvInTcQty(1); // I set value in here
        invInTc1.add(invIn);

        InvInTc invIn2 = invInTc1.get(0);
        invIn2.setInvInTcQty(5); // and when I set value again, value invInTc1 is replaced to 5
        invInTc2.add(invIn);
    }
public void testValue(){
invInTc1=新的数组列表();
invInTc2=新的ArrayList();
InvInTc invIn=新的InvInTc();
因维因·塞因文特基(“1234”);
setInvInTcQty(1);//我在这里设置了值
invInTc1.添加(invIn);
InvInTc invIn2=invInTc1.get(0);
setInvInTcQty(5);//当我再次设置值时,值invInTc1被替换为5
invInTc2.添加(invIn);
}
这里有一个对象-一个
InvInTc
实例

两个数组列表中的值都引用同一个对象,因此对该对象所做的更改将通过两个列表可见

作为一个真实的例子,假设我在两张纸上写下我的家庭地址,然后给乔一张纸,给弗雷德一张纸。乔去把我的前门漆成红色。。。然后弗雷德来我家。他当然会看到一扇红色的前门。代码中也发生了完全相同的事情

如果需要两个独立对象,则需要创建两个独立对象:

InvInTc invIn = new InvInTc();
invIn.setInvInTcKey("1234");
invIn.setInvInTcQty(1);
invInTc1.add(invIn);

InvInTc invIn2 = new InvInTc();
// Copy the key from one object to the other
invIn2.setInvInTcKey(invIn.getInvTcKey());
// But set a different quantity
invIn2.setInvInTcQty(5);
invInTc2.add(invIn);
了解对象和引用在Java中的工作方式至关重要。我强烈建议你找一本详细解释它的好书

(我也鼓励你重新考虑你的名字,让它更友好。)

你这里有一个对象--
InvInTc
的一个实例

两个数组列表中的值都引用同一个对象,因此对该对象所做的更改将通过两个列表可见

作为一个真实的例子,假设我在两张纸上写下我的家庭地址,然后给乔一张纸,给弗雷德一张纸。乔去把我的前门漆成红色。。。然后弗雷德来我家。他当然会看到一扇红色的前门。代码中也发生了完全相同的事情

如果需要两个独立对象,则需要创建两个独立对象:

InvInTc invIn = new InvInTc();
invIn.setInvInTcKey("1234");
invIn.setInvInTcQty(1);
invInTc1.add(invIn);

InvInTc invIn2 = new InvInTc();
// Copy the key from one object to the other
invIn2.setInvInTcKey(invIn.getInvTcKey());
// But set a different quantity
invIn2.setInvInTcQty(5);
invInTc2.add(invIn);
了解对象和引用在Java中的工作方式至关重要。我强烈建议你找一本详细解释它的好书


(我还鼓励您重新考虑您的名字,以便更加友好。)

您使用
invInTc1.get(0)
获得的引用仍然指向列表1中添加的相同对象。因此,修改值时,实际上是在修改同一对象引用


对该对象所做的更改将对两个列表都可见。

使用
invInTc1.get(0)
获得的引用仍然指向添加到列表1中的同一对象。因此,修改值时,实际上是在修改同一对象引用


对该对象所做的更改将对两个列表都可见。

如Arun所述,您正在操作同一个对象,下面是代码的剖析:

InvInTc invIn=新的InvInTc();//您已经在这里创建了一个实例

//设置不同的属性 因维因·塞因文特基(“1234”); invIn.setInvInTcQty(1);//我在这里设置了值

//将对象添加到Arraylist invInTc1.添加(invIn)

//您正在创建一个指向列表第0个元素的新引用 //由于您只添加了一个元素,即invIn,因此invIn2将指向与invIn相同的//内存位置 InvInTc invIn2=invInTc1.get(0)

//因此,您正在处理同一对象,但使用了新引用,因此该值将更改为与invIn保留的相同对象 invIn2.setInvInTcQty(5)

//另一个元素添加到列表中,但两个元素都引用同一个对象。 invInTc2.添加(invIn)


希望对您有所帮助

正如Arun所提到的,您正在操作同一个对象,下面是您的代码剖析:

InvInTc invIn=新的InvInTc();//您已经在这里创建了一个实例

//设置不同的属性 因维因·塞因文特基(“1234”); invIn.setInvInTcQty(1);//我在这里设置了值

//将对象添加到Arraylist invInTc1.添加(invIn)

//您正在创建一个指向列表第0个元素的新引用 //由于您只添加了一个元素,即invIn,因此invIn2将指向与invIn相同的//内存位置 InvInTc invIn2=invInTc1.get(0)

//因此,您正在处理同一对象,但使用了新引用,因此该值将更改为与invIn保留的相同对象 invIn2.setInvInTcQty(5)

//另一个元素添加到列表中,但两个元素都引用同一个对象。 invInTc2.添加(invIn)


希望它能帮助我

如何将值从invInTc1复制到invInTc2,而不必逐个设置每个属性?@SanIrawan:你可以在
InvInTc
中创建一个构造函数,它接受一个现有对象并复制值-然后你只需要在一个位置执行。或者潜在地使用
Object.clone()
。如何将值从invInTc1复制到invInTc2,而不必逐个设置每个属性?@SanIrawan:您可以在
InvInTc
中创建一个构造函数,该构造函数接受现有对象并复制值-然后只需在一个位置执行即可。或者潜在地使用
Object.clone()