java - 为什么我的代码使用 'IF' 执行 'ELSE' 和 '==' ,但不使用 '.equals' 执行?

标签 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);
}

如果该字符串已被使用,则应打印出一条消息“字符串已使用”并且不添加它,使该字段保留为空(null)。

如果我使用 .equals,它会正常工作(嗯,正如我所期望的那样)。 但是,如果我使用“==”,它会打印出消息,但仍将(已使用的)字符串添加到数组中。

注意:感谢所有建议,但我非常感谢您能解释为什么会发生这种情况(而不是我应该如何改进代码)。

编辑:我不明白这是如何重复的。如果有人可以粘贴我的问题答案的相关部分,我将不胜感激。我的问题是:既然条件在两种情况下都是 True (使用 == 或 .equals),为什么 .equals() 遵循中断命令,而 == 触发 else AS IF 它也为 false?

最佳答案

我希望以下摘要对您的情况有所帮助:

  1. 使用 == 来比较原语,例如 boolean 值、int、char 等,而 Java 中使用 equals() 比较对象。

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

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

关于java - 为什么我的代码使用 'IF' 执行 'ELSE' 和 '==' ,但不使用 '.equals' 执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56205847/

相关文章:

java - 堆大小持续增长,但 jstat S0 和 S1 持续清理

java - "prepareStatement(String sql)"的内部功能

java - 如何在java中减小多部分文件的大小

java - 在 Java 中的 lambda 表达式中类型转换?

java - 对象数据库添加复合索引不起作用

java - 如何在Spring Batch中读取ini文件(键=值)

java - 不以//开头如何接受单行 Java 注释?

java - 如何序列化一个 lambda?

java - 将类编码到 XSD :Anytype xml

默认情况下未导入 java.lang.Math.abs?