java中添加后List所有元素都是一样的

Huy*_* Tử 4 java element list addition

最近我的java项目因为我的理解出现了错误。我有以下代码:

 Post post = new Post(); // Post is my custom class
 List<Post> list = new ArrayList<Post>();
 for( int i = 0; i < num; i++){
      post.setTitle( TITLE[i] ); //TITLE[] is a array of String.
      list.add(post);
 }
Run Code Online (Sandbox Code Playgroud)

之后 List 列表中的所有元素都相同并且等于标题为 TITLE[num-1] 的帖子。我知道我对这个问题有误解,因为当我把构造函数

 Post post = new Post();
Run Code Online (Sandbox Code Playgroud)

在 for 循环内,一切都很好。但有人可以帮我解释一下吗?非常感谢。

Chr*_*ian 5

您刚刚创建了一个Post对象,所以在这一行中

post.setTitle( TITLE[i] ); //TITLE[] is a array of String.
list.add(post);
Run Code Online (Sandbox Code Playgroud)

您只需更改其标题Post并将其添加到list. 最后,你将只有一次 但多次。Postlist

为什么?因为事实上,对象是对内存中位置的引用,因此您在每次迭代中添加相同的引用(相同的位置)。

你能怎样解决它?您可以在每次迭代时创建一个新对象:

for( int i = 0; i < num; i++){
    Post post = new Post();
    post.setTitle( TITLE[i] );
    list.add(post);
}
Run Code Online (Sandbox Code Playgroud)