Java 对象内的静态对象引用是否被复制?

Java 对象内的静态对象引用是否被复制?,java,memory,reference,static,Java,Memory,Reference,Static,我想知道我是否创建了一个静态对象并将其作为值传递给另一个对象,该对象是否复制了该对象,或者我只是有一个引用 我想创建一个图像并在同一类的其他对象之间共享,如下所示: 在播放器类中: BufferedImage image = new BufferedImage(); Animation animation1 = new Animation(image, 1, 2); Animation animation2 = new Animation(image, 3, 6); Animation ani

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

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

播放器类中

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);
private BufferedImage img;

public Animation(BufferedImage image, int frame, int maxframes){
this.img = image;
}
动画中。类

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);
private BufferedImage img;

public Animation(BufferedImage image, int frame, int maxframes){
this.img = image;
}
我希望每个动画都是独立的,但使用相同的图像,但我想知道它们是否在内部被复制(图像,所以我在内存中有2个),或者它们只是被引用

我不想创建100个100图像的动画,但只有一个图像和100个动画


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

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

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


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

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

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


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

这个问题非常类似于
java是通过引用或值传递的
,为了澄清这一点,下面是我的

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


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

这个问题非常类似于
java是通过引用或值传递的
,为了澄清这一点,下面是我的

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


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

没有
静态
对象。有引用对象的静态变量。没有
静态
对象。存在引用对象的静态变量。