Java List <>行为

nva*_*yen 0 java collections list

我对Java List <>类有奇怪的行为,它会覆盖添加了最后一个值的所有值.

以下面的代码为例......

import java.io.*;
import java.sql.*;
import java.lang.*;
import java.util.*;

public class alist
{
    //   
    public static class item 
    {    
        public static String name;
        public static long   type;

        item() {}

        item( String n, long t )
        {
            name = n; 
            type = t; 
        }

        public String toString()
        {
            return "name: " + name +
                 ", type: " + String.valueOf( type );
        }
    }    

    public static void main(String [] args)
    {
        List<item> lst = new ArrayList<item>();

        lst.add( new item( "abc", 0 ) );
        lst.add( new item( "xyz", 1 ) );

        for ( item i : lst )
            System.out.println( i.toString() );
    }
}
Run Code Online (Sandbox Code Playgroud)

我原以为这会输出以下内容......

name: abc, type: 0
name: xyz, type: 1
Run Code Online (Sandbox Code Playgroud)

...而是它打印...

name: xyz, type: 1
name: xyz, type: 1
Run Code Online (Sandbox Code Playgroud)

......想法?

我确定这是愚蠢的事情,因为树木,我根本看不到森林..

Pab*_*lgo 7

您声明您的Item类属性是静态的,因此它们由所有Item实例共享.静态属性是类属性,每个属性只有一个与类本身相关联,而不是与每个单个对象相关联.

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

Item构造函数的第二次调用是更改值,这就是获取相同String的原因.

更改:

    public static String name;
    public static long   type;
Run Code Online (Sandbox Code Playgroud)

对于:

    public String name;
    public long   type;
Run Code Online (Sandbox Code Playgroud)