我有以下代码:
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
创建对象时间是为了保存未来进程的像素对象值。对象时间也将在未来发生变化......
答案 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)
您的temporal
和pixel
指向同一个内存。所以,如果你换另一个人也会接受改变。