gpt4 book ai didi

Java List<> 行为

转载 作者:行者123 更新时间:2023-12-01 07:26:13 26 4
gpt4 key购买 nike

我对 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() );
}
}

我本希望输出以下内容...

name: abc, type: 0
name: xyz, type: 1

...但它打印...

name: xyz, type: 1
name: xyz, type: 1

...想法?

我确信这很愚蠢,我只是因为树木而看不见森林。.

最佳答案

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

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

Item 构造函数的第二次调用正在更改值,这就是您获得相同字符串的原因。

更改:

    public static String name;
public static long type;

对于:

    public String name;
public long type;

关于Java List<> 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24124001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com