有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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语句,即“failed”。我现在该怎么办


共 (2) 个答案

  1. # 1 楼答案

    这就是问题所在:

    if(temppass==pass)
    

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

    The == operator compares the value of two object references to see whether they refer to the same String instance.

    The equals() method compares the value inside String instances (on the heap) irrespective if the two object references refer to the same String instance or not.


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

  2. # 2 楼答案

    字符串或任何其他对象必须始终使用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");
        }
    }
    

    Update:

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

    因此,当执行temppass == pass时,如果两个变量都指向同一个对象,则会进行比较,但情况并非如此。它们指向内存中的两个不同对象(尽管两个对象包含相同的值)。因此,检查返回false

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


    希望这有帮助