【发布时间】:2017-06-20 11:19:31
【问题描述】:
我正在探索字符串常量池和堆内存。
if("String".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");
输出
Equal
如果我在修剪之前在字符串中添加一个空格,它将给出不相等的输出
if("String ".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");
输出
Not Equal
你能解释一下上面的场景吗?
以及如何查看堆内存和字符串常量池?
【问题讨论】:
-
因为如果 trim() 不更改字符串,它只会返回
this即原始字符串对象本身。 -
因为字符串是不可变的
-
无关:不要养成使用 { 大括号 } 让 if/then/else 块没有的习惯。始终使用 { 大括号 }。
-
@nafas “平等”是在返回的字符串上完成的(如果需要,也就是新的字符串或本身)
-
@nafas 这是正确的,但在这里并不重要。