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));
}
}
预期产量-
5c
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值将是最后创建的对象的初始值