string

zd287kbt  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(277)

这个问题在这里已经有答案了

打印字符串比较结果时得到奇怪的输出(3个答案)
字符串等于且==与字符串串联[重复](4个答案)
java string==vs等于在与连接[duplicate]组合时给出true或false(5个答案)
字符串串联和比较在println语句中产生意外结果(5个答案)
在java中,计算为布尔值的表达式不能与字符串串联。为什么[重复](5个答案)
4个月前关门了。

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

我试着运行这个代码,但在控制台中没有得到字符串输出。打印的唯一值是r1==r2结果,即false。
这里的问题是,我希望输出是“result:false”,为什么false刚刚被打印出来。
我也明白,应该使用equals,我只是想知道为什么在给定的场景中结果是这样。
如果有人能指出相关文档并帮助解释为什么会出现这种行为,那就太好了。

myzjeezk

myzjeezk1#

因为它被当作

("Result: " + r1 ) == r2

哪个是 false . 这样处理是因为 + 优先级高于 == .
你需要做的是得到字符串以及

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

这会给你 Result: true

4szc88ey

4szc88ey2#

比较 strings 并以你想要的方式打印你应该使用的方法 equals() . 这样地:

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

crcmnpdw3#

事实上,输出是“false”,因为首先进行串联,所以它是“result:hello”,然后将其与返回false的r2(“hello”)进行比较。这就是为什么您在控制台中看到“false”。
如果您想看到“result:true”,您需要使用equals而不是==因为这就是我们在java中比较字符串的方式。请参阅下面的文章以了解差异:如何比较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"

相关问题