Java新手,我正在使用NetBeans尝试一些简单的代码。该程序只是将几个字符串放入预定长度的数组中,而不允许添加以前使用的字符串。
String[] AnArray = new String[3];
for (int i=0; i<AnArray.length; i++) {
System.out.println("Insert a string:");
Scanner s = new Scanner(System.in);
String astring = s.next();
for (String AnArray1 : AnArray) {
if (astring.equals(AnArray1)) { /* THIS IS WHERE I CHANGE astring.equals(AnArray1) TO astring == AnArray1 */
System.out.println ("String already used");
break;
}
else
AnArray[i] = astring;
}
}
for (String AnArray1 : AnArray) {
System.out.println(AnArray1);
}
如果该字符串已被使用,则应打印出一条消息“字符串已使用”,而不添加它,使该字段为空(空)。
如果我使用.equals,它可以正常工作(嗯,正如我期望的那样)。 但是,如果我使用“ ==”,它将打印出消息,但仍将(已使用的)字符串添加到数组中。
注意:感谢您的所有建议,但是对于造成这种情况的原因(这与我应该做的改进工作相反),我将不胜感激。
编辑:我看不到它是如何重复的。如果有人可以将答案的相关部分粘贴到我的问题上,我将不胜感激。我的问题是:由于条件在两种情况下都为真(使用==或.equals),为什么.equals()跟随break命令,而==触发其他(如果还假)?
答案 0 :(得分:0)
在Java中,==
比较对象的引用,而不是对象的内容。也就是说,使用==
来检查两个引用是否指向内存中的同一对象(这意味着它们也具有相同的内容)。但是,使用.equals()
,您可以检查对象的内容(即字符串字符)是否相同。另请参见What is the difference between == and equals() in Java?。
编辑:这是一个有效的示例,尝试尽可能地靠近原始代码:
String[] AnArray = new String[3];
for (int i=0; i<AnArray.length; i++) {
System.out.println("Insert a string:");
Scanner s = new Scanner(System.in);
String astring = s.next();
boolean alreadyContains = false;
for (int k=0; k<i; k++) {
AnArray1 = AnArray[k];
if (astring.equals(AnArray1)) {
alreadyContains = true;
break;
}
}
if (alreadyContains) {
System.out.println ("String already used");
} else {
AnArray[i] = astring;
}
}
for (String AnArray1 : AnArray) {
System.out.println(AnArray1);
}
答案 1 :(得分:0)
希望以下摘要对您有帮助:
使用==比较原始内容,例如布尔值,整数,字符等,而 使用equals()比较Java中的对象。
==如果两个引用属于同一对象,则返回true。的结果 equals()方法取决于重写的实现。
要比较字符串,请使用equals()而不是==相等 运算符。