簡體   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