首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java List<>行为

Java List<>行为
EN

Stack Overflow用户
提问于 2014-06-09 23:54:46
回答 4查看 317关注 0票数 0

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

以下面的代码为例...

代码语言:javascript
复制
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() );
    }
}

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

代码语言:javascript
复制
name: abc, type: 0
name: xyz, type: 1

..。但它却打印了..。

代码语言:javascript
复制
name: xyz, type: 1
name: xyz, type: 1

..。想法?

我敢肯定这是很愚蠢的事情,因为有树,我根本看不到森林。。

EN

回答 4

Stack Overflow用户

发布于 2014-06-09 23:57:50

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

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

第二次调用Item构造函数是为了改变值,这就是为什么你会得到相同的字符串。

更改:

代码语言:javascript
复制
    public static String name;
    public static long   type;

适用于:

代码语言:javascript
复制
    public String name;
    public long   type;
票数 7
EN

Stack Overflow用户

发布于 2014-06-09 23:58:04

您的Item类具有静态变量,而不是成员变量。每次调用构造函数时,都会更改静态值。

将其更改为:

代码语言:javascript
复制
public static class item 
{    
    public String name;
    public long   type;

    item() {}

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

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

Stack Overflow用户

发布于 2014-06-09 23:58:37

这是因为您在声明名称和类型时添加了static。Static关键字只创建对象的一个实例,所以无论何时更新该值,它的所有值都是相同的。只需移除静电并尝试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24124001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档