开发者

Assigning values to java object

I have the following code:开发者_Go百科

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

Result:

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  

My class Color3D saves RGB (int)values.

I use the object util to print the int values of a Color3D object.

If you look at the result, for some reason after changing the red and green values of the pixel object I'm also modifying the green's values and I don't want that behaviour.

I want to have:

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  

The object temporal was created with the intention of saving the pixel object values for a future process. The object temporal will also change in future...


You're assigning references not objects.

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

You now have two reference variables holding equal references to the same object. Thus, any modifications are visible through both variables. You presumably want something like:

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

I don't know if those are real methods, but you should see the idea. Note that this creates a new, independent object.


With this code:

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

you've only created one Color3D object. Objects are only created whenever new is called.

temporal is a reference to the same object that pixel refers to. Invoking methods on temporal is the same thing as invoking methods on pixel.

If you want each variable to refer to a different object with the same value, then you need to actually create two different objects:

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


Your temporal and pixel points to the same memory. So if you change one other one will pick up the change as well.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜