0

我通过 DatagramChannel 发送消息如下:

ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
String request_message = "request";
buf.put(request_message.getBytes());
buf.flip();

int bytesSent = udpserver.send(buf, successor_port_1); // udpserver is a DatagramChannel

然后我阅读了服务器上的消息:

ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();

String message = new String(buf.array(), Charset.forName("UTF-8"));
System.out.println(message); //print message for testing purposes

if (message == "request"){
    //code here does not get executed
 }

问题是,我的代码没有输入“if”语句,即使 message = “request” 似乎也得到了我的 print 语句的确认。

任何帮助,将不胜感激!

4

1 回答 1

1

原因是Stringjava中的s需要和比较.equals,所以你的测试应该是:

if (message.equals("request")){

这是因为,在 Java 中,==测试两个对象是否是同一个实例(它测试引用是否相等——两个引用是否都指向同一个内存)而不是相等。

您可以进行快速测试:

System.out.println("request" == new String("request"));

输出:

false

有关更多信息,请阅读SO 答案。

于 2013-04-11T15:27:54.880 回答