Java程序验证用户名时出现问题
我的Java程序坏了! 这是我的密码:Java程序验证用户名时出现问题,java,Java,我的Java程序坏了! 这是我的密码: import javax.swing.JOptionPane; public class practice { public static void main(String[] args) { String userName = "Eddie"; //username is Eddie String passWord = "hI"; // passsword is hI String name; name = JOpti
import javax.swing.JOptionPane;
public class practice
{
public static void main(String[] args)
{
String userName = "Eddie"; //username is Eddie
String passWord = "hI"; // passsword is hI
String name;
name = JOptionPane.showInputDialog("Whats your username? ");
if (name == userName)
JOptionPane.showMessageDialog(null, "Exepted!");
System.exit(0);
}
}
它应该询问我的用户名,如果我输入“Eddie”,它必须显示消息对话框“Accepted”。但在我输入“Eddie”后,程序将关闭!
有什么建议吗?if(name==userName)
应该改为if(name.equals(userName))
Java中的equals()和“==”运算符都用于比较对象以检查相等性,但equals方法和==运算符之间的主要区别在于前者是方法,后者是运算符
请在此处阅读更多内容以确定差异:需要是
如果(name.equals(userName))
同样,我相信您的单词“exepted”需要被接受应该注意的是,=
比较两个引用是否指向同一个对象,而equals()
方法(对于字符串
)检查两个对象是否具有相同的值。我这是什么意思?到底有什么区别
当您使用==
比较字符串时,它会检查您正在比较的两个字符串是否指向内存中完全相同的位置。请注意,我可以使用String a=“abc”
和String b=“abc”
,但是a
和b
并不引用相同的内存(它们可能表示两个不同的内存位置,而这些内存位置恰好都具有相同的值“abc”)。这正是您的示例中发生的情况,除了字符串的值是“Eddie”<另一方面,code>equals(),比较任意两个字符串以查看它们是否具有相同的字符
蹩脚的比喻:
想象一下JVM是一个服务员。假设你看到你的朋友鲍勃拿着培根芝士汉堡和脆洋葱,看起来很开胃。进一步假设您想询问JVM是否可以获得Bob所拥有的。如果您使用
==
,JVM将把Bob正在吃的汉堡从他的鼻子底下撕下来,然后递给您。就是那个汉堡。如果您使用equals()
,JVM将从厨房为您提供另一个带脆洋葱的培根芝士汉堡。您几乎总是希望使用字符串比较的equals()
。不要偷鲍勃的汉堡 多谢各位。你能解释一下“==”和equals()之间的区别吗?如果你用=
检查字符串的相等性,它会检查它们是否是同一个对象,也就是说,它们有相同的引用。但是如果使用equals()
,它会比较所需字符串的值。哈哈,是的。我没有意识到我犯了那个错误。当你成为一名程序员时,Pell check是你最好的朋友:DMakes完美的感觉!