[英]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);
您的temporal
和pixel
指向相同的內存。 因此,如果您進行其他更改,那么也會進行更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.