为什么我的代码同时使用“ ==”而不是“ .equals”同时执行“ IF”和“ ELSE”?

时间:2019-05-19 08:00:46

标签: java

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命令,而==触发其他(如果还假)?

2 个答案:

答案 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)

希望以下摘要对您有帮助:

  1. 使用==比较原始内容,例如布尔值,整数,字符等,而 使用equals()比较Java中的对象。

  2. ==如果两个引用属于同一对象,则返回true。的结果 equals()方法取决于重写的实现。

  3. 要比较字符串,请使用equals()而不是==相等 运算符。