Println

时间:2018-05-15 01:02:29

标签: java string boolean memory-address println

我正在寻找关于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

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

这只是与众不同,并且违背了我对Java的理解(我认为它略高于AP级别作为基准)。

1 个答案:

答案 0 :(得分: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);