【问题标题】:String not getting printed in the output [duplicate]字符串未在输出中打印[重复]
【发布时间】:2020-09-07 11:17:45
【问题描述】:
String r1 = "hello";
String r2 = "hello";
System.out.println("Result: " + r1 == r2);

我尝试运行此代码,但在控制台中没有得到字符串输出。打印的唯一值是 r1==r2 结果,即 false。

这里的问题是我期望输出是“结果:假”,为什么只是打印出来的是假。

我也知道应该使用 .equals,我只是想知道为什么在给定的场景中结果是这样的。

如果有人可以指出相关文档并帮助说明为什么会出现这种行为,那就太好了。

【问题讨论】:

  • 字符串与 Java 中的 .equals() 进行比较 stackoverflow.com/questions/513832/…
  • @kembytes 但是像这样实例化的两个字符串指向 JVM 字符串池中的同一个位置,因此它“应该”返回“true” - 完整的解释已经作为答案发布
  • 不是==而不是equals的问题。事实上r1==r2 是真的。这是+== 的运算符顺序的问题。字符串"Result: " + r1 不等于r2

标签: java string println


【解决方案1】:

确实输出是“假”,因为首先连接完成,所以它是“结果:你好”,然后它与返回假的 r2(“你好”)进行比较。 这就是您在控制台中看到“false”的原因。

如果您想查看“结果:true”,您需要使用 equals 而不是 ==,因为这就是我们在 java 中比较字符串的方式。请参阅下面的帖子以了解差异: How do I compare strings in Java?

如果您真的想使用“==”比较它们,则需要添加括号,以便在连接之前先进行比较。

    String r1 = "hello";
    String r2 = "hello";
    System.out.println("Result: " + r1 == r2); // output: "false"
    System.out.println("Result: " + r1.equals(r2)); // output: "Result: true"
    System.out.println("Result: " + (r1 == r2)); // output: "Result: true"

【讨论】:

    【解决方案2】:

    因为它被处理为

    ("Result: " + r1 ) == r2
    

    这是false。之所以这样处理,是因为+的优先级高于==

    你还需要做的是获取字符串

    System.out.println("Result: " + (r1 == r2));
    

    这会给你Result: true

    【讨论】:

      【解决方案3】:

      要比较strings 并以您想要的方式打印,您应该使用方法equals()。像这样:

      String r1 = "hello";
      String r2 = "hello";
      System.out.println("Result: " + r1.equals(r2));
      

      【讨论】:

        猜你喜欢
        • 2020-03-25
        • 1970-01-01
        • 2018-11-07
        • 2017-02-02
        • 1970-01-01
        • 2017-04-01
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多