我在这段代码中遇到了一个奇怪的问题,当我使用第一个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。
谢谢大家。
答案 0 :(得分:5)
变化:
if(tempUser.getPhoneNumber().equals(array[1]))
要:
if(java.util.Objects.equals(tempUser.getPhoneNumber(), array[1]))
Objects.equals
是空的,并且在电话号码为空时不介意。