Java - 当变量等于字符串时,如果语句没有捕获[重复]
Posted
技术标签:
【中文标题】Java - 当变量等于字符串时,如果语句没有捕获[重复]【英文标题】:Java - If statement not catching when variable equals string [duplicate] 【发布时间】:2012-12-04 01:28:08 【问题描述】:可能重复:How do I compare strings in Java?
(这可能是重复的,我不知道.equals
。我很抱歉。)
当我决定制作一个 4 字符的字符串生成器时,我今天在 Java 中搞砸了。我让程序生成我定义的所有可能的字符组合。这不是一个项目,我只是想看看这是否可能。我的问题在于字符串检查。我先贴代码。
String text = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
char[] chars = text.toCharArray();
String name = "Mike";
String pass;
outerLoop:
for (int a = 0; a < chars.length; a ++)
for (int b = 26; b < chars.length; b++)
for (int c = 26; c < chars.length; c++)
for (int d = 26; d < chars.length; d++)
pass = chars[a]+""+chars[b]+""+chars[c]+""+chars[d];
System.out.println(pass);
if (pass == name)
System.out.print("password");
break outerLoop;
嵌套的if
将检查pass
是否等于Mike。如果是,则打印密码并中断 for 循环。
pass = chars[a]...
是正确的方法吗?当我在没有if
的情况下对其进行测试时,我将其打印出来并正确打印了所有组合。它确实打印了Mike
,但它没有捕获if
。
我还更改了嵌套的 for
循环,使它们以小写开头,因为当我进行细微更改时程序需要一段时间才能运行。
【问题讨论】:
...我们确实需要根据 SO 的规则提出这个问题。它……无处不在! 我为重复道歉,我不知道.equals()
,也没有在网上找到。
【参考方案1】:
每天至少出现一次。应该有一个专门针对它的“关闭问题”选项。不过,又来了……
==
运算符测试两个操作数是否是相同的实例。
.equals()
方法比较两个操作数的值,但前提是类已经实现了这个方法(String
实现了),否则它的行为与==
相同( Object
类就是这样实现的)。
【讨论】:
【参考方案2】:字符串应该使用equals()进行比较
【讨论】:
真的吗?那我需要和我的教授谈谈。在我把它贴在这里之前,我让他看看这个。 你的“教授”不会在我的工作面试中持续一分钟。 如果有人看,并不意味着他可以看到所有错误。【参考方案3】: if (pass == name)
应该是
if (pass.equals(name))
使用String.equals() 方法检查字符串是否相等。 ==
运算符只检查两个引用变量是否引用同一个对象。 equals() 方法检查两个字符串是否有意义地相等。
【讨论】:
恭喜获得 8888 名 :) @Doorknob 哈哈...谢谢:) 我觉得这样一个简单的解决方案真的很傻。当我在发帖前问他这件事时,我的教授也没有注意到这一点。 @MichaelGarrison 我认为您的教授不会知道这一点。他可能刚刚离开让你弄清楚,这样你以后就不会犯同样的错误:)无论如何,现在你知道如何检查字符串相等性。并且还可以读出关于在 java 中比较对象的内容。 :) 为此哇+1。花了一个小时试图弄清楚这一点。当大多数语言不这样做时,为什么 Java 会这样做?我想我期望跨语言兼容性。以上是关于Java - 当变量等于字符串时,如果语句没有捕获[重复]的主要内容,如果未能解决你的问题,请参考以下文章