java - 将 readline() 的值与字符串进行比较

标签 java string sockets inputstream

我正在阅读inputstream使用readline()方法,然后尝试比较它。

代码如下:

//socket is defined before this
InputStream is = socket.getInputStream();

br = new BufferedReader(new InputStreamReader(is));

Line = br.readLine();

    if (Line  == "hey") {
        Log.d("watsapp client tag", "message pushed !!");
        Log.d("watsapp client tag", "" + Line);


    }
   else {

        Log.d("watsapp client tag", "message not pushed");
        Log.d("watsapp client tag", "" + Line);

    }

上面的代码总是执行else部分。尽管输入流的第一个值是“hey”,第二个值不是。所以我期待在 logcat 中“消息已推送!!”和“消息未推送”相反,我得到了“消息未推送”

05-31 14:46:14.309    6138-6151/? D/watsapp client tag﹕ message not pushed
05-31 14:46:14.309    6138-6151/? D/watsapp client tag﹕ hey
05-31 14:46:14.339    6138-6151/? D/watsapp client tag﹕ message not pushed
05-31 14:46:14.339    6138-6151/? D/watsapp client tag﹕ <Messageadded:1112/>

请告诉 if (Line == "hey") 行出了什么问题。谢谢!

最佳答案

您必须使用equals()方法比较String。这里的 == 运算符检查引用。像这样比较 String (和其他引用类型变量) -

String firstString = "someValue";
String secondString = "someValue";

if(firstString.equals(secondString)){
   System.out.println("both string are equals"); 
}else{
   System.out.println("not equals"); 
}  

更新:有时我们会将String类型的变量与String文字或常量进行比较。那么最好像这样执行检查 -

String str1 = "aString";
String str2 = null;
System.out.println( "aString".equals(str1) ); //true;
System.out.println( "aString".equals(str2) ); //false;  

像这样比较的优点是在第二种情况下你永远不会得到NullPointerException

关于java - 将 readline() 的值与字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559059/

相关文章:

java - 按下按钮时播放声音-android

Python UDP-接收缓冲区被覆盖

c++ - 字符串与重复字符的排列(访问数组概念)

linux - 如果一个socket被四元组识别,监听socket的四元组信息是什么?

java - Android套接字总是以超时结束

web - 将 Web 应用程序从 Tomcat 移动到 WebLogic 时库版本错误

java - 用homebrew安装bazel的问题

java - 在 JSP 中从 MySQL 数据库中获取值

python - "How to Think Like a Computer Scientist (python)"中的练习 7.9 测量字符串中某个字符的出现次数

java.net.SocketTimeoutException 与 java.net.ConnectException