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
语句,即"失败"。我现在该怎么办?
答案 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实例。