我实际上并不知道这里有什么,但我正在编写服务器客户端应用程序,客户端将一个字符串发送到服务器。我需要将字符串“x”发送到服务器,因此它开始运行code1,但是当我这样做时,服务器运行code3。最有趣的是System.out.println(x);
在控制台中打印“a”。
这是服务器代码的一个片段(在win7,javac编译器上运行):
sInput = new ObjectInputStream(socket.getInputStream());
sOutput = new ObjectOutputStream(socket.getOutputStream());
String x = (String) sInput.readObject();
System.out.println(x);
if (x == "a") {
/*
* code1
*/
} else if (x == "b") {
/*
* code2
*/
} else {
/*
* code3
*/
}
这就是客户端所做的(运行osx,javac编译器):
sInput = new ObjectInputStream(socket.getInputStream());
sOutput = new ObjectOutputStream(socket.getOutputStream());
String x = "a";
sOutput.writeObject(x);
我该如何解决?
P.S。我知道异常声明,它们被删除以使代码更短。
答案 0 :(得分:1)
使用equals方法比较两个字符串的值。有关详细信息,请参阅How do I compare strings in Java?。
答案 1 :(得分:0)
“==”运算符用于比较2个对象,它检查对象是否引用内存中的相同位置。换句话说,它检查2个对象名称是否基本上引用了相同的内存位置。
equals方法实际上是用来比较2个对象的内容,而不是它们在内存中的位置。来源 - http://www.programmerinterview.com/index.php/java-questions/java-whats-the-difference-between-equals-and/
由于字符串是不可变的并且每次实例化时都使用不同的内存位置,因此最好总是使用equals()方法进行比较:)