java之所以能够;混淆;同一类的不同实例?
我有如下代码:java之所以能够;混淆;同一类的不同实例?,java,class,Java,Class,我有如下代码: player a=new player(4,10,2,3,"You",'@'); player b=new player(4,10,12,3,"Him",'@'); a.pickUp(new weapon("Lightsaber",true,1,1)); System.out.println(a.getPlayerInventory()[0]); System.out.println(b.getPlayerInventory()[0]); 然而,在这一点上,这段代码的
player a=new player(4,10,2,3,"You",'@');
player b=new player(4,10,12,3,"Him",'@');
a.pickUp(new weapon("Lightsaber",true,1,1));
System.out.println(a.getPlayerInventory()[0]);
System.out.println(b.getPlayerInventory()[0]);
然而,在这一点上,这段代码的输出告诉我,B的库存的内容也包括一把光剑。(与玩家A拥有的对象相同。)
java中出现这种情况的一些可能原因是什么?这可能与其他方法是静态的还是公共/私有的有关吗
我试过用谷歌搜索,但什么也找不到(可能是因为我不知道这个问题叫什么)
谢谢你能给我的任何帮助。如果你有一个静态的玩家清单,那么如果a得到一把光剑,每个玩家都会有相同的光剑。如果你有一个静态的玩家清单,那么如果a得到一把光剑,每个玩家都将拥有相同的光剑,而没有看到
玩家
类的实现,我不能肯定,但最有可能的解释是,包含玩家库存的数组被声明为静态
,这意味着该类的所有实例都将共享该数组。没有看到player
类的实现,我不能肯定,但最有可能的解释是,包含该player清单的数组被声明为static
,这意味着该类的所有实例都将共享该数组。最有可能是静态字段。你有“player”类的代码吗?我想知道为什么人们在不知道它的含义的情况下编写Static
。@Ingo:我的经验表明,他们从不使字段和方法静态开始,然后他们尝试从main方法使用它们,这会导致编译错误,然后发现它们可以使字段和方法保持静态以解决编译错误,然后将static视为允许代码编译的神奇关键字:)static fields,很有可能。你有“player”类的代码吗?我想知道为什么人们在不知道它的意思的情况下编写static
。@Ingo:我的经验表明,他们一开始不将字段和方法设置为静态,然后试图从主方法使用它们,这会导致编译错误,然后发现他们可以将字段和方法设置为静态以解决编译错误,然后将static视为允许代码编译的神奇关键字:)