“if”语句块无法正常工作

时间:2014-02-17 19:46:46

标签: java if-statement objectinputstream

我实际上并不知道这里有什么,但我正在编写服务器客户端应用程序,客户端将一个字符串发送到服务器。我需要将字符串“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。我知道异常声明,它们被删除以使代码更短。

2 个答案:

答案 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()方法进行比较:)