解组时对象方法的问题?

时间:2016-05-06 13:39:02

标签: java xml jaxb marshalling unmarshalling

我想知道为什么我的解组过程会造成一些麻烦:

  1. 我将我的java对象保存在xml文件中。
  2. 我从xml文件加载我的java对象
  3. 一旦完成,我的java对象(ClassMain.java)的方法就会出现奇怪的行为。

    确实method isLogin() 在返回true之前返回false (ClassMain.java。有什么想法吗?

    MainClass

    public static void main(String[] args) {
        Player p1 = new Player();
        p1.setLogin("p1");
        p1.setMdp("mdp1");      
        try {
    
            //Test : verify that player's login is 'p1' (return true)
            System.out.println(p1.isLogin("p1"));
    
            marshaling(p1);
    
            Player pfinal =unMarshaling();
    
            //Test : verify that player's login is 'p1' (return False ?why?)
            System.out.println(pfinal.isLogin("p1"));
    
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
    private static Player unMarshaling() throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(Player.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        Player player = (Player) jaxbUnmarshaller.unmarshal( new File("C:/Users/Public/player.xml") );
        return player;
    }   
    private static void marshaling(Object o) throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(Player.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        jaxbMarshaller.marshal(o, new File("C:/Users/Public/player.xml"));
    }}
    

    玩家等级

    @XmlRootElement(name = "joueur")
    @XmlAccessorType (XmlAccessType.FIELD)
    public class Player{
    
    @XmlAttribute
    private String login;
    
    public Player() {
    }
    public String getLogin() {
        return this.login;
    }
    public void setLogin(String login) {
        this.login = login;
    }
    
    public boolean isLogin(String n){
        if(this.login == n)
            return true;
        else 
            return false;
    }
    }
    

1 个答案:

答案 0 :(得分:2)

isLoginString个对象上进行身份比较。

在第一种情况下,您使用相同的字符串文字"p1"几次,而==由于true汇集而使用String

解组后,您会收到一个新的String equals" p1",但不会是同一个String对象。

因此,在equals方法中使用==代替isLogin

请参阅How do I compare strings in Java?