Java中使用equals比较两个字符串,总是返回false
最近在学习Java的网络编程时,遇到一个问题,在服务端接收到消息进行equals字符串比较时,结果总是返回false。
byte[] contaier = new byte[1024];
DatagramPacket packet = new DatagramPacket(contaier,0,contaier.length);
socket.receive(packet);
String data = new String(packet.getData(), 0, packet.getData().length);
System.out.println(data);
System.out.println(data.length());
if(data.equals("bye")){
break;
}
当输入bye时,循环并不会结束,打印data中的值也确实是bye。之后发现原因是创建byte数组时,设置长度为1024,之后读取的字符串长度也是1024,与设置的bye字符串的长度不一致导致结果总是false。
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
查看部分equals源码,发现确实时先比较字符串的长度才进行之后的比较,这里给出一种解决方案,将字符串中的空格部分全部去掉后,再进行比较,例如上面的代码中加入
data = data.trim();
这样就可以得到正确结果。