为java对象赋值

时间:2010-09-04 02:25:00

标签: java

我有以下代码:

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)值 我使用object util来打印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  

创建对象时间是为了保存未来进程的像素对象值。对象时间也将在未来发生变化......

3 个答案:

答案 0 :(得分:3)

您指定的是引用而不是对象。

// 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());

我不知道这些是不是真正的方法,但你应该看到这个想法。请注意,这会创建一个新的独立对象。

答案 1 :(得分:1)

使用此代码:

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);  

答案 2 :(得分:0)

您的temporalpixel指向同一个内存。所以,如果你换另一个人也会接受改变。