我正在寻找关于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级别作为基准)。
答案 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);