如何匹配字符串输入

时间:2017-02-17 10:56:37

标签: java

import java.util.*;
import java.lang.*;

class password
{
    public static void main(String[] args)
    {
        int i;
        String pass,temppass;
        Scanner s=new Scanner(System.in);
        System.out.println("Enter Password: ");
        pass=s.next();
        System.out.println("Re-enter password: ");
        temppass=s.next();
        if(temppass==pass)
        {
            System.out.println("Sucess");
        }
        else
            System.out.println("failed");
    }
}

我用Java编写了这个基本代码来匹配我的密码输入。即使我输入了正确的密码,它也会转到else语句,即"失败"。我现在该怎么办?

2 个答案:

答案 0 :(得分:1)

字符串或任何其他对象必须始终使用equals方法来检查是否相等。

您使用的temppass == pass不正确。

您应该使用temppass.equals(pass)来比较两个字符串。

这是正确的方法:

class password
{
    public static void main(String[] args)
    {
        int i;
        String pass,temppass;
        Scanner s=new Scanner(System.in);
        System.out.println("Enter Password: ");
        pass=s.next();
        System.out.println("Re-enter password: ");
        temppass=s.next();
        if(temppass.equals(pass)) // This is how equality must be checked 
        {
                System.out.println("Sucess");
        }
        else
                System.out.println("failed");
    }
}
  

更新

==运算符比较对象引用而不是值。

因此,当您执行temppass == pass时,它会比较两个变量是否指向同一个对象,而不是这种情况。它们指向内存中的两个不同对象(尽管两个对象都包含相同的值)。因此,检查返回false

另一方面,equals方法检查对象的值,如果值匹配,则返回true

希望这有帮助!

答案 1 :(得分:1)

这就是问题所在:

if(temppass==pass)

您必须使用equals方法进行字符串比较。

  

==运算符会比较两个对象引用的值,以查看它们是否引用相同的字符串实例

     

equals()方法比较String实例(在堆上)中的,无论两个对象引用是否引用相同的String实例。

来源:What is the difference between == vs equals() in Java?