[英]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.