Java的 String创建运行机制和StringBuffer StringBuilder的区别
2020-07-19 04:57
597 查看
Java String 类型数据一旦创建了就不能改变。Java在创建String类型数据时先查找常量池,如果常量池中存在该字符串就指向已经存在的字符串的位置,如果不存在该字符串就先创建字符串,然后再指向该字符串中在常量池的位置。
Java创建字符串主要有两种方法
String s1 = "123456"; String s2 = new String("123456");
s1字符串是直接赋值,编译期间在常量池中直接创建,字符串在常量池中只能有一份。
String s3 = "123"+"456"; System.out.println(s1==s3); true
s2字符串是在运行中创建,字符串是创建在堆中,在堆中可以保存多个相同的字符串。new最少创建一个对象,如果在常量池中存在该字符就只在堆中创建,并引用常量池中的对象。如果常量池中不存在就在常量池中创建一个,并引用它。
String s4 = new String("123456"); System.out.println(s2==s4); System.out.println(s1==s4); false false
因为Java String的创建机制,所以在编写代码时如果String只是中间变量的话一般不要直接创建,而是通过StringBuffer和StringBuilder来进行中间过渡,减少程序运行时间和空间。
StringBuilder与StringBuffer的区别在于,StringBuilder时线程不安全的,StringBuffer是线程安全的,因为不需要保证线程安全所以StringBuilder的运行速度快,根据程序特定情况来选定。
StringBuffer源码:
public synchronized int length() public synchronized int capacity() public synchronized void ensureCapacity(int minimumCapacity) public synchronized StringBuffer append(Object obj)
通过对StringBuffer的方法源码的截取,我们可以发现每个方法前都加上了synchronized保证了线程安全,但同时也降低了程序的运行速度。
StringBuilder源码:
public StringBuilder append(Object obj) public StringBuilder replace(int start, int end, String str) public StringBuilder insert(int index, char[] str, int offset,int len)
StringBuilder的方法前都没有进行加锁所以运行效率更高,如果在程序中已经可以保证线程安全了那么使用StringBuilder效率更高。
相关文章推荐
- JAVA String StringBuffer StringBuilder 区别
- java.lang.StringBuffer与java.lang.StringBuilder的作用?区别是什么?
- StringBuilder StringBuffer String的区别(源码分析)-java
- Java String,StringBuilder和StringBuffer的区别 StringBuilder > StringBuffer> String
- Java String/StringBuilder/StringBuffer的区别
- Java中String/StringBuffer/StringBuilder区别
- Java中String和StringBuffer/StringBuilder的区别
- java中string stringbuffer stringbuilder的本质区别
- JAVA基础之InterView(一)--String+StringBuffer+StringBuilder的区别
- java 面试专题(二)String StringBuffer StringBuilder的区别
- java语言:String StringBuffer StringBuilder区别
- Java-String&StringBuilder&StringBuffer的区别与分析
- Java软件低级错误(二十 ):正确理解String/StringBuffer/StringBuilder的性能区别
- 浅谈java中String StringBuffer StringBuilder的区别
- Java中String StringBuffer StringBuilder的区别
- Java编程-String StringBuffer StringBuilder三者比较
- String StringBuffer StringBuilder 三者的区别
- 黑马程序员_毕向东Java基础_集合(1)String&StringBuffer&StringBuilder&基本数据类型包装类
- 通过Java的反射机制创建运行时类的对象并调用其结构
- String StringBuffer StringBuilder的区别