可变性与不可变性

String StringBuilder StringBuffer 的区别

代码应用

public static void main(String[] args) {
String s = " Hello ";
s += " World ";
s.trim( );
System.out.println(s);
}


正确输出结果:

 Hello  World 


问题:
1.经过Trim()之后应去掉两边多余的空格(包括制表符),为什么此处输出没有变化

说明:
1.字符串对象(String Object)是非可变的(immutable),这个题目容易迷惑人的地方在s.trim( )这一行。

2.理解对象引用和不可达对象会由垃圾回收器收集。




解决:
如果需要输出前后没有空格的”Hello World”,那么应该将s.trim( )再赋值给”s”。这个赋值操作可以让s指向新创建出来的字符串对象。

		StringBuilder sb = new StringBuilder(" Hello ");
		sb.append(" World ");
		System.out.println(sb.toString().trim());
		
		StringBuffer sf = new StringBuffer(" Hello ");
		sf.append(" World ");
		System.out.println(sf.toString().trim());

		System.exit(0);


StringBuilder不是一个线程安全的类,因此仅仅用作本地变量是没有问题的。如果你希望用作实例变量,那么可以选择线程安全的StringBuffer类。

运行StringBuilder 会出现 ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JD
添加System.exit(0); 可避免

博文转载:
http://www.importnew.com/2217.html

猜你喜欢

转载自mingyundezuoan.iteye.com/blog/2216005