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)
......想法?
我确定这是愚蠢的事情,因为树木,我根本看不到森林..
您声明您的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)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |