java - 解码时对象方法出现问题?

标签 java xml jaxb marshalling unmarshalling

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

  1. 我将 java 对象保存在 xml 文件中。
  2. 我从 xml 文件加载 java 对象

完成后,我的 java 对象 (ClassMain.java) 的方法中会出现奇怪的行为。

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

主类

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;
}
}

最佳答案

isLoginString 对象进行身份比较。

在第一种情况下,您多次使用相同的字符串文字 "p1",并且 == 给出 true 因为字符串池化。

解码后,您会得到一个新的String,它等于“p1”,但不会是相同的String对象。

因此,在 isLogin 方法中使用 equals 而不是 ==

参见How do I compare strings in Java?

关于java - 解码时对象方法出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073885/

相关文章:

java - 为什么我们必须多次调用 Firebase getCurrentUser() ?

Java - 转储到 XML

c# - 从字符串中删除转义序列 '\' 以将其转换为 XmlDocument

java - 如何在 GWT 的客户端使用 JAXB 注释?

Java - 在重新绘制高分辨率图像时,paintComponent() 会大大减慢程序速度

java - 阴影 jar 中的 Maven 依赖排除

xml - 在 excel 2007 中打开生成的 xls 文件时出现警告

jaxb - "XXX is an interface and jaxb can' t 处理接口(interface)“仅在liferay上下文中出现错误

java - JAXB Fragment Marshal 不带命名空间

java - @OneToMany 注解有用吗?