Java中的空点异常

时间:2014-02-06 10:52:49

标签: java nullpointerexception dataoutputstream

我在这段代码中遇到了一个奇怪的问题,当我使用第一个if条件执行代码时,它一切正常并且被视为已被删除。但是,当我评论if语句并使用另一个if条件(已经评论过的那个)时,它会给出NPE。 getUserIP()和getPhoneNumber()都只是私有字符串的普通getter。 并且两个值都是由普通的setter设置的。 所以任何想法为什么会发生这种情况? 感谢。

public void sendBroadcast(final String broadcast) {
    System.out.println("entered sendBroadcast");

        String fullPeep=broadcast;
        System.out.println("fullPeep: "+fullPeep);
        String array[] = fullPeep.split("<!!>");

        for(User tempUser: friends)
        {
            if(tempUser.getUserIP().equals(this.getUserIP()))
            {
            System.out.println("tempuser:" +tempUser.getPhoneNumber() + " user: "+array[1] );
            //if(tempUser.getPhoneNumber().equals(array[1]))
            //{
                System.out.println("tempuser:" +tempUser.getPhoneNumber() + " user: "+array[1] );
                System.out.println("if statemnt of broadcast method");

            try {
                DataOutputStream out2= new DataOutputStream(socket.getOutputStream());
                out2=tempUser.getUserDataOutputStream();
                out2.writeUTF(fullPeep+"\n");
                out2.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            }
            //}
        }   
}


Exception in thread "Thread-6" java.lang.NullPointerException
at User.sendBroadcast(User.java:180)
at Server$ServerThread.run(Server.java:394)
编辑:我弄清楚导致异常的原因以及为什么tempUser.getPhoneNumber()在某些时候返回null。 谢谢大家。

1 个答案:

答案 0 :(得分:5)

变化:

if(tempUser.getPhoneNumber().equals(array[1]))

要:

if(java.util.Objects.equals(tempUser.getPhoneNumber(), array[1]))

Objects.equals是空的,并且在电话号码为空时不介意。