关于nullpointerexception:Java中的空点异常

Null Point Exception in Java

在这段代码中,我遇到了一个奇怪的问题,当我使用第一个if条件执行代码时,一切都很好,而且非常出色。但是,当我注释if语句并使用另一个if条件(已经注释的条件)时,它给出了npe。getUserIP()和getPhoneNumber()都只是私有字符串的普通getter。这两个值都是由普通的设置器预先设置的。你知道为什么会这样吗?谢谢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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+"
"
);
                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()在某个时刻返回空值。谢谢大家。


变化:

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

到:

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

Objects.equals为空安全,不介意电话号码为空。