标签:object类 stringbu focus java基础 ring gif 技术 lan bsp
String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!
虽然 String 的值是不可变的,但是它们可以被共享
字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
比较字符串要用Object类的equals()方法,因为String类重写了该方法。
这里插入一段题外话:有 int a= 3; int b = 3;编译器首先处理int a = 3;先是在栈中建立一个变量为a的引用,然后在栈中查找是否有字面值为3的地址,若没找到,就在栈中开辟一个空间来存放3这个字面值的地址,然后将a指向3的地址。接下来编译器处理int b = 3;同样在栈中建立b的引用变量后,由于在栈中找到了有3这个字面量的值,便直接将b指向了3的地址,这样a,b都同时指向了3这个字面量地址。如果我们接下来声明 a = 4;那会发生什么呢?这时在编译器内部,它会重新搜索栈中是否存在有4这个字面值,若有,则将a指向这个4字面值的地址,若没有,则在栈中自己开辟一个,然后指向它,不会影响b的指向。
构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
特点:
1:可以对字符串内容进行修改。
2:是一个容器。
3:是可变长度的。
4:缓冲区中可以存储任意类型的数据。
5:最终需要变成字符串。
JDK1.5出现StringBuiler;构造一个其中不带字符的字符串生成器,初始容量为 16 个字符。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
方法和StringBuffer一样;
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。
运行速度,执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String
String最慢的原因:
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
2. 线程安全
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
3. 总结一下
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
标签:object类 stringbu focus java基础 ring gif 技术 lan bsp
原文地址:https://www.cnblogs.com/indexlm/p/12883075.html