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

我的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 = 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完美的感觉!