2018-12-02 21:59:04 卢浮宫 版权声明:本文为站长原创文章,转载请写明出处
简单看一下think of java 在看string时做以下笔记
我们知道String是不可变得,StringBuffer是可变的,我们在使用String时经常会看到这样的代码
String str = "aaa";
String str2 = str.toUpperCase();
还有
String hello = "hello";
String helloWorld = hello + "World";
看上面的代码,那么是不是String str 和 hello 改变了呢?答案是:并没有改变。
这里简单说一下其工作原理。
在第一个例子中:str2 在调用toUpCase() 时只是引用了str的值,编译器已经新创建了一个对象来保存新的String了。
在第二个例子中:可以理解为编译器创建了一个StringBuilder对象用于构建最终的String对象,然后调用了StringBuilder的append()方法,
最后调用toString|()生成最 终的结果并保存为helloWorld。
既然编译器可以自动对我们的代码进行优化,那是不是说我们以后就直接用String而不需要使用StringBuffer了呢?
在think of java 一书中给出了虚拟机运行的过程(参见 p284),可以得出结论:如果操作的字符串比较简单的时候可以使用String,
但是在一些循环中使用toString()等方法时就会降低代码的健壮性。
下一篇文章会对String 、Stringbuffer 和 StirngBuilder 三个常用的字符串进行简单对比,欢迎进行查看并指正。
以上文字参考think of java 对字符创的讲解,有不合适的地方可以评论。