Q1.下面的代码片段会输出什么?
1
2
3
4
|
String s = " Hello " ; s += " World " ; s.trim( ); System.out.println(s); |
A1.正确输出是” Hello World “。(注意:前后都带空格)
由于字符串前后都有空格,因为有些人可能会认为结果是”Hello World”。那么,这个题目想要考察的是什么呢?
1. 字符串对象(String Object)是非可变的(immutable),这个题目容易迷惑人的地方在s.trim( )这一行。
2. 理解对象引用和不可达对象会由垃圾回收器收集。
上面的代码也可以改写成如下方式:
1
2
3
|
StringBuilder sb = new StringBuilder( " Hello " ); sb.append( " World " ); System.out.println(sb.toString().trim( )); |
StringBuilder不是一个线程安全的类,因此仅仅用作本地变量是没有问题的。如果你希望用作实例变量,那么可以选择线程安全的StringBuffer类。