【问题标题】:Importance of () in Boolean + String for PrintlnBoolean + String for Println 中 () 的重要性
【发布时间】:2018-10-24 17:45:56
【问题描述】:

我一直在寻找有关 Java 如何处理字符串存储和 println() 函数的一些细节,最终我创建了这个:

String s = "Oh No!";
String t = s;
System.out.println("t == s?" + t == s);
System.out.println(t == s);

控制台打印:

false
true

我希望条件为真,因为这两个对象清楚地引用了相同的内存位置。但是 println 不仅忽略了“t == s”吗?细绳;它似乎将布尔值转换为false!自然,当我在第一个 println 的 (t == s) 布尔值周围加上括号时,显示结果如预期:

t == s?true
true

我的问题是:为什么第一个布尔值周围缺少括号不仅打印错误,而且还导致 println 忽略“t == s?”

这很不寻常,违背了我对 Java 的理解(我会说它作为基准略高于 AP 水平)。

【问题讨论】:

  • 你错过了+的运算符优先级。

标签: java string boolean memory-address println


【解决方案1】:

操作顺序很重要,这里

System.out.println("t == s?" + t == s);

等价于

System.out.println(("t == s?" + t) == s);

您在比较之前将t 添加到String。你期待

System.out.println("t == s?" + (t == s));

您还可以使用格式化 io 来确保操作顺序(并消除隐含的StringBuilder)。喜欢,

System.out.printf("t == s?%b%n", t == s);

【讨论】:

  • 哇!那是我在那里犯的一个非常基本的错误。谢谢!
猜你喜欢
  • 2022-07-19
  • 1970-01-01
  • 2011-04-07
  • 2015-06-07
  • 2011-06-14
  • 2011-01-27
  • 2016-08-11
  • 2011-11-24
  • 2013-10-31
相关资源
最近更新 更多