Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态变量数组列表_Java - Fatal编程技术网

Java 静态变量数组列表

Java 静态变量数组列表,java,Java,假设我有这个代码 public class Data { public static int x, y; // ... } // ... public static ArrayList<Data> myData = new ArrayList<Data>(); 问题是:静态前缀如何改变代码的行为? 我的意思是:myData是否总是由同一个对象填充,因为它的字段x和y被声明为静态的?或者myData是否总是由新对象填充? 换句话说:add()语句如何添加对

假设我有这个代码

public class Data {
    public static int x, y;
    // ...
}
// ...
public static ArrayList<Data> myData = new ArrayList<Data>();
问题是:静态前缀如何改变代码的行为? 我的意思是:myData是否总是由同一个对象填充,因为它的字段x和y被声明为静态的?或者myData是否总是由新对象填充? 换句话说:add()语句如何添加对象?复制它


谢谢。

它不会复制它。它只是将对象的引用添加到列表中

当你写作时

Data thisData = ...
thisData
是对您创建的
Data
对象的引用。使用该引用将始终指向实例化的对象,除非明确复制该对象(通过复制构造函数、
clone()
方法等)

因此,反复向列表中添加
thisData
仅意味着有多个列表引用同一对象(或一个列表多次引用同一对象)。如果更改
thisData
的成员,您将看到这一点。每个列表都将反映这一变化


注意这适用于对象。对于原语(
int
long
等),复制值。当然,对于不可变对象(无法更改的对象),这并不重要。

它不会复制它。它只是将对象的引用添加到列表中

当你写作时

Data thisData = ...
thisData
是对您创建的
Data
对象的引用。使用该引用将始终指向实例化的对象,除非明确复制该对象(通过复制构造函数、
clone()
方法等)

因此,反复向列表中添加
thisData
仅意味着有多个列表引用同一对象(或一个列表多次引用同一对象)。如果更改
thisData
的成员,您将看到这一点。每个列表都将反映这一变化


注意这适用于对象。对于原语(
int
long
等),复制值。当然,对于不可变对象(无法更改的对象),这并不重要。

现在,您的列表在对象的实例之间共享,使用
静态


任何调用
.add(thisData)
的实例;将向您的列表中添加数据

现在您的列表在对象的实例之间共享,使用
静态


任何调用
.add(thisData)
的实例;将数据添加到列表中

静态
意味着如果您的
类的任何实例
访问
myData
,或者如果您以
.myData
的身份访问它,您将与同一
ArrayList
对话,即它在您的类的所有实例之间共享

它与添加的内容无关

编辑:静态的x,y完全避开了我。在这种情况下,
数据的所有实例将共享这两个变量,即它们的值将相同


这并不意味着它们是同一个实例,因为
=
操作将返回false。另外,
数据的任何其他变量
对于每个实例来说都是唯一的。

静态
意味着如果您的
类的任何实例
访问
myData
,或者如果您以
myData
的身份访问它,您将与相同的
数组列表
对话,也就是说,它在类的所有实例之间共享

它与添加的内容无关

编辑:静态的x,y完全避开了我。在这种情况下,
数据的所有实例将共享这两个变量,即它们的值将相同


这并不意味着它们是同一个实例,因为
=
操作将返回false。另外,
数据的任何其他变量
对于每个实例都将像往常一样是唯一的。

数据数组的所有实例都将共享相同的字段x和y。任何修改的尝试都将传播到所有新创建的实例。那么为什么要在数组中有多个实例呢?

数据数组的所有实例都将共享相同的字段x和y。任何修改的尝试都将传播到所有新创建的实例。为什么要在数组中有多个实例呢?

它会将一个被静态变量引用的对象放在列表中。因此,如果不更改静态变量,它将始终放置相同的对象,如果创建由静态变量引用的新对象,它将添加新对象。但要小心,如果您使用一些setter来更改object的某些字段,这些setter将显示在列表中已添加的对象上。

它会将您引用的静态变量对象放入列表中。因此,如果不更改静态变量,它将始终放置相同的对象,如果创建由静态变量引用的新对象,它将添加新对象。但要小心,如果您使用某些setter更改了object的某些字段,这些setter将显示在列表中已添加的对象上。

这意味着arraylist实际上不起作用?它将包含同一静态对象的多个引用?您说原语是复制的。我的字段x和y不是这样吗?这意味着arraylist实际上不起作用?它将包含同一静态对象的多个引用?您说原语是复制的。这不是我的字段x和y的情况吗?是的,这是关于我的数据是静态的,但问题是关于静态字段x和y的行为。@BeppiMenozzi啊,我完全没有想到,我编辑了我的答案。是的,这是关于我的数据是静态的,但问题是关于静态字段的行为,x和y.@BeppiMenozzi啊,我完全不知道,我已经编辑了我的答案。