繁体   English   中英

将值分配给Java对象

[英]Assigning values to java object

我有以下代码:

Color3D pixel = new Color3D(200, 0, 0);  
Color3D temporal  = pixel;  
System.out.println(util.printColor("Pixel: ", pixel));  
System.out.println(util.printColor("Temporal: ", temporal));  
pixel.setR(0);  
pixel.setG(200);  
pixel.setB(0);  
System.out.println(util.printColor("Pixel: ", pixel));  
System.out.println(util.printColor("Temporal: ", temporal));  

结果:

Pixel: r: 200, g: 0, b: 0  
Temporal: r: 200, g: 0, b: 0  
Pixel: r: 0, g: 200, b: 0  
Temporal: r: 0, g: 200, b: 0  

我的班级Color3D保存RGB(int)值。
我使用对象工具来打印Color3D对象的int值。

如果查看结果,由于某种原因,在更改像素对象的红色和绿色值后,我也在修改绿色的值,并且我不希望这种行为。

我希望有:

Pixel: r: 200, g: 0, b: 0  
Temporal: r: 200, g: 0, b: 0  
Pixel: r: 0, g: 200, b: 0  
Temporal: r: 200, g: 0, b: 0  

创建对象时间是为了保存像素对象值以供将来处理。 暂时的对象也将在将来改变...

您要分配引用而不是对象。

// Create new Color3D object, and put reference in pixel reference variable
Color3D pixel = new Color3D(200, 0, 0); 
// Copy reference from pixel reference variable to temporal reference variable
Color3D temporal  = pixel;

现在,您有两个引用变量,它们具有对同一对象的相等引用。 因此,任何修改都可以通过两个变量看到。 您大概想要这样的东西:

Color3D temporal  = new Color3D(pixel.getR(), pixel.getB(), pixel.getB());

我不知道这些是否是真实的方法,但是您应该明白这个想法。 请注意,这将创建一个新的独立对象。

使用此代码:

Color3D pixel = new Color3D(200, 0, 0);  
Color3D temporal  = pixel;  

您只创建了一个 Color3D对象。 仅在调用new创建对象。

temporal是对pixel引用的同一对象的引用。 temporal上的调用方法与pixel上的调用方法相同。

如果要每个变量引用具有相同值的不同对象,则实际上需要创建两个不同的对象:

Color3D pixel = new Color3D(200, 0, 0);  
Color3D temporal = new Color3D(200, 0, 0);  

您的temporalpixel指向相同的内存。 因此,如果您进行其他更改,那么也会进行更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM