Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的链表代码中出现意外结果_Java - Fatal编程技术网

java中的链表代码中出现意外结果

java中的链表代码中出现意外结果,java,Java,以下代码编译和执行时没有任何错误或警告。但却产生了意想不到的结果 代码: import java.util.LinkedList; import java.util.Scanner; //defining a custom data-type (class) class LLObj{ static int NodeInt; static char NodeChar; LLObj(int x, char y){ NodeInt = x;

以下代码编译和执行时没有任何错误或警告。但却产生了意想不到的结果

代码:

import java.util.LinkedList;
import java.util.Scanner;

//defining a custom data-type (class)
class LLObj{
    static int NodeInt;
    static char NodeChar;

    LLObj(int x, char y){
        NodeInt = x;
        NodeChar = y;
    }
}

class LLexp{

    static LinkedList<LLObj> list = new LinkedList<>();

    public static void main(String[] args){

        list.addLast(new LLObj(5,'c'));

        System.out.println(list.get(0).NodeInt);
        System.out.println(list.get(0).NodeChar);

        list.addLast(new LLObj(7,'h'));

        System.out.println(list.get(0).NodeInt);
        System.out.println(list.get(0).NodeChar);
        System.out.println(list.get(1).NodeInt);
        System.out.println(list.get(1).NodeChar);
    }
}
import java.util.LinkedList;
导入java.util.Scanner;
//定义自定义数据类型(类)
类LLObj{
静态int节点;
静态字符节点;
LLObj(整数x,字符y){
NodeInt=x;
NodeChar=y;
}
}
LLexp类{
静态LinkedList=新建LinkedList();
公共静态void main(字符串[]args){
addLast(新的LLObj(5,'c'));
System.out.println(list.get(0.NodeInt));
System.out.println(list.get(0.NodeChar));
addLast(新的LLObj(7,'h'));
System.out.println(list.get(0.NodeInt));
System.out.println(list.get(0.NodeChar));
System.out.println(list.get(1.NodeInt));
System.out.println(list.get(1.NodeChar));
}
}
预期产量-

5
c
5
c
7
h

获得的产量-

5
c
7
h
7
h

  • 为什么会这样
  • 我如何获得预期的结果
  • 这就是问题所在:

    static int NodeInt;
    static char NodeChar;
    
    如果每个
    LLObj
    都有自己的值(这似乎很可能),那么这些值应该是实例变量


    理解实例字段/方法和静态字段/方法之间的区别非常重要。有关更多详细信息,请参阅。

    您已经将NodeInt和NodeChar定义为静态变量。静态变量位于类级别,对于不同的实例,它们不包含不同的值。 从两者中去除静电,它应该是好的

    //defining a custom data-type (class)
    class LLObj
    {
        static int NodeInt;
        static char NodeChar;
    
        LLObj(int x, char y)
        {
            NodeInt = x;
            NodeChar = y;
        }
    }
    
    从LLObj类创建的所有对象都共享相同的数据成员

    静态数据成员与类关联,而不是与启动的对象关联,

    在您的示例中,从LLObj创建的所有对象的NodeInt和NodeChar值将是最后创建的对象的初始值