Java中的空点异常

T-D*_*T-D -2 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)
Run Code Online (Sandbox Code Playgroud)

编辑:我弄清楚导致异常的原因以及为什么tempUser.getPhoneNumber()在某些时候返回null.谢谢大家.

Boa*_*ann 5

更改:

if(tempUser.getPhoneNumber().equals(array[1]))
Run Code Online (Sandbox Code Playgroud)

至:

if(java.util.Objects.equals(tempUser.getPhoneNumber(), array[1]))
Run Code Online (Sandbox Code Playgroud)

Objects.equals 是空的安全,并不介意电话号码为空.