对象内的静态对象引用会被复制吗?

时间:2013-12-30 02:45:07

标签: java memory reference static

我想知道我是否创建了一个静态对象并将其作为值传递给另一个对象,如果该对象复制了该对象,或者我只是有一个引用...

我想创建一个单独的图像并在同一个类的其他对象之间共享它,如下所示:

Player.class

BufferedImage image = new BufferedImage();

Animation animation1 = new Animation(image, 1, 2);
Animation animation2 = new Animation(image, 3, 6);
Animation animation3 = new Animation(image, 5, 10);
Animation.class

中的

private BufferedImage img;

public Animation(BufferedImage image, int frame, int maxframes){
this.img = image;
}

我希望每个动画都是独立的,但是使用相同的图像,但我想知道它们是否被复制(图像,所以我有2个内存)或者它们只是被引用。

我不想用100张图片创建100个动画,但只需要1个图像和100个动画。

注意:这些课程只是为了说明我的观点。它们不是真实的。

2 个答案:

答案 0 :(得分:3)

在Java中,参数按值传递。这意味着引用的值将传递给方法。

如果传递静态变量,则会将相同的引用传递给每个动画。这意味着如果您修改动画中的图像,您将修改图像的同一个静态副本。

如果要单独修改图像,则需要创建图像的深层副本。

答案 1 :(得分:1)

这个问题与java is passed by reference or value非常相似,为了澄清这一点,这是我的githubpage

实际上Java是按值传递的,但是在将值传递给方法参数时创建的是pointer中的C/C++而不是reference概念中的C++,这意味着你它们只共享相同的内存地址(java格式),但不是传入的参数的别名。

因此,有了承诺,所有这三个图像都是外部image的一个对象,任何对其进行任何更改的人都会对其他人产生影响。