常见Java面试题 – 非可变性(Immutability)和对象引用(Object reference)

匿名网友 匿名网友 发布于: 2015-08-30 00:00:00
阅读 123 收藏 0 点赞 0 评论 0

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类。

评论列表
文章目录