-2

我在这段代码中有一个奇怪的问题。当我使用第一个if条件执行代码时,一切正常且符合预期。但是,当我评论该if语句并使用另一个if条件(已经评论过的条件)时,它给出了NPE

getUserIP() 和 getPhoneNumber() 都是私有字符串的普通 getter。这两个值都是由普通设置者设置的。为什么会这样?

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 statement 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 的原因。

4

1 回答 1

5

改变:

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

至:

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

Objects.equals是 null 安全的,并且不会介意电话号码为 null 时。

于 2014-02-06T11:18:56.747 回答