String StringBuffer StringBuilder 区别整理
来源:互联网 发布:centos7.0安装nginx 编辑:程序博客网 时间:2024/06/10 12:08
一.先说一下String 这个类
常量池
常量池(Constant Pool):指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。JVM虚拟机为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(String,Integer和 Floating point常量)和对其他类型,字段和方法的符号引用。对于String常量,它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的, 对于String类型,有一张固定长度的CONSTANT_String_info表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引用。
1.String s = "abc";
创建过程分析:在class文件被JVM装载到内存中,JVM会创建一块String Pool(String缓冲池)。当执行String s = “abc”;时,JVM首先在String Pool中查看是否存在字符串对象“abc”(如何查看呢?用equals()方法判断),如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用String Pool中已存在的对象“abc”,然后将引用s指向该对象;如果不存在该对象,则先在String Pool中创建一个新的字符串对象“abc”,然后将引用s指向String Pool中创建的新对象。
注意:使用“字符串常量”引号创建的字符串对象时,在编译期就已经确定将该对象存储到String Pool中了。因此,String s = “abc”只会在编译期,在String Pool中创建一个对象。
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);//true
结果说明:JVM创建了两个引用str1和str2,但在String Pool中只创建了一个对象,而且两个引用都指向了同一个对象。
2.String s = new String("abc");
创建过程分析:当执行String s = new String(“abc”);时,JVM首先在String Pool中查看是否存在字符串对象“abc”,如果不存在该对象,则先在String Pool中创建一个新的字符串对象“abc”,然后执行new String(“abc”)构造方法,在Heap里又创建一个新的字符串对象“abc”(new出来的对象都放在Heap里面),并将引用s指向Heap中创建的新对象;如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用String Pool中已存在的对象“abc”, 然后执行new String(“abc”)构造方法,在Heap里又创建一个新的字符串对象“abc”,并将引用s指向Heap中创建的新对象。
注意:使用new String(“”)创建的字符串对象时,会在运行期创建新对象存储到Heap中。因此,new String(“abc”)创建字符串对象时,会创建2个对象,编译期在String Pool中创建一个,运行时Heap中创建一个。
- String StringBuffer StringBuilder 区别整理
- String StringBuffer,StringBuilder整理
- String StringBuffer StringBuilder 区别
- String, StringBuffer, StringBuilder区别
- String,StringBuffer,StringBuilder区别
- String StringBuffer StringBuilder区别
- String StringBuilder StringBuffer 区别
- String ,stringbuffer,stringbuilder区别
- String, StringBuffer, StringBuilder区别
- String StringBuffer StringBuilder区别
- String StringBuilder StringBuffer区别
- String StringBuffer StringBuilder 区别
- StringBuilder、StringBuffer、String区别
- String,StringBuffer,StringBuilder区别
- String StringBuffer StringBuilder区别
- String StringBuffer StringBuilder 区别
- string,stringbuffer,stringbuilder区别
- string,stringbuffer,stringbuilder区别
- 分布式事务之说说TCC事务
- 分布式事务之说说TCC事务
- [USACO1.5]数字金字塔 Number Triangles
- caffe在ubuntu16.04配置流程
- 隐藏标题栏和底部操作栏,可上下滑动显示
- String StringBuffer StringBuilder 区别整理
- MapReduce:详解Shuffle过程
- GradientDrawable 可以用来通过程序方式给控件设置背景如圆角,边框等
- (4)Hadoop 添加和删除数据节点
- ansible安装配置
- 数据库隔离级别的本质解释
- [SD2014集训]查询(分块+数学相关)
- SQLite基本使用
- Shiro实战(二)