String、StringBuilder、StringBuffer
2015-07-06 15:25
423 查看
一,
String 字符串常量;
StringBuilder 字符串变量;
StringBuffer 字符串变量;
单从字面的意思可知,String是“字符常量”,是不可变的对象,可能有人会不同意,因为:
aa
bb
变量s明明已经改变了。表面上是改变了,实际上第二个s已经不是第一个s了;JVM对这段代码的解释:先创建一个对象s,赋值“aa”
。执行s=“bb”时,再创建一个新的对象s,赋值“bb”。因此每一次赋值都是在创建新的对象。因此说String对象是不可变的,也因此效
率很低。
在效率方面:StringBuilder》StringBuffer》String;
StringBuffer相对StringBuilder来说是线程安全的。通常我们使用字符串操作,都是在单线程中,因此推荐使用StringBuilder。
二,
字符串缓冲池:
false
false
false
String s0=new String("abc");代码执行流程是:现在String pool中查找有没有值为“abc”的对象,没有就在String pool中创建
一个值为“abc”的对象,然后在利用new 的方式在有创建了一个值为“abc”的对象;这个对象放在内存堆中,s0引用指向堆中的对象。
String s1=“abc”;在String Pool中查找有没有值为“abc”的对象,没有就在String pool中创建。有就直接将String pool中对象
赋值给s1;
String s2=new String("abc");与第一行代码是一样的。
因此三个值都不一样。
String 字符串常量;
StringBuilder 字符串变量;
StringBuffer 字符串变量;
单从字面的意思可知,String是“字符常量”,是不可变的对象,可能有人会不同意,因为:
package string; public class StringN { public static void main(String[] args) { String s="aa"; System.out.println(s); s="bb"; System.out.println(s.toString()); } }输出结果:
aa
bb
变量s明明已经改变了。表面上是改变了,实际上第二个s已经不是第一个s了;JVM对这段代码的解释:先创建一个对象s,赋值“aa”
。执行s=“bb”时,再创建一个新的对象s,赋值“bb”。因此每一次赋值都是在创建新的对象。因此说String对象是不可变的,也因此效
率很低。
在效率方面:StringBuilder》StringBuffer》String;
StringBuffer相对StringBuilder来说是线程安全的。通常我们使用字符串操作,都是在单线程中,因此推荐使用StringBuilder。
二,
字符串缓冲池:
package string; public class StringN { public static void main(String[] args) { String s0=new String("abc"); String s1="abc"; String s2=new String("abc"); System.out.println(s0==s1); System.out.println(s0==s2); System.out.println(s1==s2); } }输出结果:
false
false
false
String s0=new String("abc");代码执行流程是:现在String pool中查找有没有值为“abc”的对象,没有就在String pool中创建
一个值为“abc”的对象,然后在利用new 的方式在有创建了一个值为“abc”的对象;这个对象放在内存堆中,s0引用指向堆中的对象。
String s1=“abc”;在String Pool中查找有没有值为“abc”的对象,没有就在String pool中创建。有就直接将String pool中对象
赋值给s1;
String s2=new String("abc");与第一行代码是一样的。
因此三个值都不一样。
相关文章推荐
- require,js 在项目中的应用
- Eric4下的ui文件修改后compile form报错
- easyui首页模板
- 算法---高速分拣(quick sort)
- 报错信息: "System.Web.UI.BaseParser" The type initializer threw an exception.
- 响应式网站布局要适应的当下主流手机屏幕的各个版本的分辨率有哪些(media query)
- Request()方法举例
- UIButton之 setBackgroundImage 和 setImage区别
- quick-3.5打包apk for release版本(DOS命令行)
- request乱码
- Angular+Angular-Ui实现分页(代码更加简单,更加容易懂哦)
- UITextField的一些常用方法
- How to make gdb print out all values in hexadecimal mode?
- GUI 文件遍历系统 (listdir.py)可显示中文目录文件版
- [leetcode] 128.Longest Consecutive Sequence
- requirejs学习博客址分享
- UIButton文字居左显示
- the resource is not on the build path of a java project错误
- android控制文件:ViewPager+Fragment+GridView使用(与AndroidQuery框架结合)
- iOS 去掉UITableView风格为group时候的最顶部的空白距离