-1
我正在嘗試爲我正在開發的遊戲實現保存/加載功能。基本上,我有一個執行所有渲染和更新遊戲狀態對象的主類(遊戲狀態對象包含玩家,敵人以及它們各自的位置,速度等)。所以我想我只是將遊戲狀態對象保存到文件usingObjectOutputStream
並加載ObjectInputStream
。保存/加載似乎工作正常,直到我在播放器類中的字符串字段上執行if語句爲止。我儘可能重新編寫代碼以重現奇怪的行爲。使用ObjectInputStream後的奇怪行爲
Player類:
import java.io.Serializable;
public class Player implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -5933597609049497854L;
private String type;
public Player()
{
type = "evil";
}
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
}
主類:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Main
{
private Player player;
public Main()
{
player = new Player();
System.out.println("player.getType(): ");
System.out.println(player.getType());
System.out.println("player.getType() == evil: ");
System.out.println(player.getType() == "evil");
saveGame();
loadGame();
System.out.println("player.getType(): ");
System.out.println(player.getType());
System.out.println("player.getType() == evil: ");
System.out.println(player.getType() == "evil");
}
public static void main(String[] Args)
{
new Main();
}
private void saveGame()
{
try
{
FileOutputStream out = new FileOutputStream("save");
ObjectOutputStream objectOut = new ObjectOutputStream(out);
objectOut.writeObject(player);
objectOut.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
private void loadGame()
{
try
{
FileInputStream fin = new FileInputStream("save");
ObjectInputStream objectIn = new ObjectInputStream(fin);
player = null;
player = (Player) objectIn.readObject();
objectIn.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
我收到從程序的輸出如下:
player.getType():
邪惡
player.getType()== evil:
true
player.getType():
邪惡
player.getType()==邪惡:
假
爲什麼領域type
不被視爲 「惡」?
'player.getType()==「evil」'比較String對象時使用equals方法。 – copeg
'=='不能用於比較字符串(或一般的對象) - 至少不會與您期望的輸出相同。改用'equals'。除此之外,要求進行一些研究之前, – Paul