Я пытаюсь реализовать функцию save/load для игры, которую я разрабатываю. В принципе, у меня есть основной класс, который выполняет весь рендеринг и обновляет объект состояния игры (объект состояния игры содержит игрока, врагов и их соответствующие позиции, скорости и т. Д.). Поэтому я думал, что просто сохраню объект состояния игры в файле usingObjectOutputStream
и загрузите ObjectInputStream
. Сохранение/загрузка, кажется, работает нормально, до момента, когда я выполняю оператор if в поле String в классе проигрывателя. Я переделал код как короткий, чтобы воспроизвести странное поведение.Странное поведение после использования ObjectInputStream
Игрок Класс:
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 "Использовать метод equals при сравнении объектов String. – copeg
'==' не может использоваться для сравнения строк (или объектов вообще) - по крайней мере, не с ожидаемым результатом. вместо этого используйте 'equals'. Кроме того, некоторые исследования, прежде чем спрашивать -.- – Paul