【问题标题】:Comparing Two strings in Java (If/Else statement) -- Android App [duplicate]比较 Java 中的两个字符串(If/Else 语句)——Android 应用程序 [重复]
【发布时间】:2013-07-23 08:00:00
【问题描述】:

我正在处理 Android 应用程序中的登录页面。

如您所知,应用程序必须检查用户名和密码是否有效,然后授予用户访问应用程序的权限。

我使用了以下代码:

...

EditText un = (EditText) findViewById(R.id.username1);

EditText pw = (EditText) findViewById(R.id.password1);

String u = un.getText().toString();

String p = pw.getText().toString();


String myUser = "user1";

String myPass = "pass1";

//////// Now on the click of the Login Button:


public void onClickL (View view){

if ( (u == myUser) && (p == myPass)) /////// move to a new activity

else ///////Display a warning message: Try again

}

我在两个 editText 字段中输入了正确的字符串,但是我总是收到警告消息。 我不明白它有什么问题。

请帮忙:)

【问题讨论】:

  • 在这里查看答案stackoverflow.com/a/6819629/557179,请使用谷歌了解基本的java概念或使用stackoverflow的搜索栏:)
  • 有趣,我第一次看到关于 SO 的字符串比较问题。这是如何获得投票的?
  • 做一些研究,努力搜索,......这些问题之前已经被stack-overflow问过了!
  • @DaveNewton - 它被投票是因为回答它的人(自私地)希望他们能获得声誉。在我看来,投票和/或回答这样的问题会伤害 StackOverflow。目标应该是将所有重复项链接到一个权威问题和答案(不要有几十个相同的问题,每个问题都有几十个相似的答案)。

标签: java android xml android-layout if-statement


【解决方案1】:

您应该使用 String 类的 equals() 方法来比较字符串。 == 比较只比较对象引用。

if (p.equals("Password")) { 
    //Do stuff 
}

所以你的应该改成:

if ((u.equals(myUser)) && (p.equals(myPass))) {
    // do stuff
}

有关此经常混淆的主题的更多信息,请参见此处:How do I compare strings in Java?

【讨论】:

  • “== 比较只比较对象引用。”我也是这么想的。但是,为什么下面的代码在两个字符串具有相同内容时显示“相同”而在内容不同时显示“不同”?或者Java编译器足够“聪明”并且它“看到”两个字符串的内容是相同的,所以它在两个字符串S1和S2中放置相同的引用并且它只占用堆上的一个内存位置来存储文本“测试1”?困惑。字符串 S1 = "test1";字符串 S2 = "test1"; if (S1 == S2) { System.out.println("Same"); } else { System.out.println("不同"); }
  • @GeertVc 查看Java字符串实习,这将回答你的问题
  • 与此同时,我确实试图找出答案。我在这里找到了一个很好的解释:stackoverflow.com/a/17942294/1252050。事实上,这解释了一切(尤其是关于“字符串常量池”的部分,我不知道它给出了我的问题的答案......)。
【解决方案2】:

==会在这种情况下对字符串进行对象比较,虽然String对象的值可能相同,但对象并不相同。因此我们使用 String.equals(string);比较两个字符串对象的值。 所以 if(u.equals(string))p.equal(string) 可能是您要找的。​​p>

【讨论】:

    【解决方案3】:

    始终使用String.equals(string) 来比较字符串。 == 将比较引用是否相等,这对字符串的工作方式不符合您的要求。

    【讨论】:

    • 有效,它几乎从来都不是你真正想要的
    【解决方案4】:

    由于 java 没有一些现代特性,所以 == 不适用于字符串。相反,它有点复杂。

    要检查两个字符串是否相等,在 if 语句中输入:

    String.equals(otherString)
    

    要比较长度,请使用 .length 方法进行比较,您可以使用 ==。

    谢谢。

    【讨论】:

    • 这与是否是脚本语言无关。
    • 嘿,我只是在证明为什么它不是语言功能的一部分。
    • 不,你不是。你什么也没做来证明什么。事实上,您提供了误导性信息。脚本语言和比较运算符之间没有关联。
    • 正如 jahroy 所暗示的,运算符的语义与语言如何定义自身有关,而不是它的“脚本性”。
    • @DaveNewton 哎呀,我马上解决。
    猜你喜欢
    • 2012-12-06
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2018-07-10
    相关资源
    最近更新 更多