我一直在寻找有关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级别)。
最佳答案
操作顺序很重要,在这里
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);