java基础总结(三)【String类】

2021-05-14 12:30

阅读:491

标签:object类   stringbu   focus   java基础   ring   gif   技术   lan   bsp   

String类

String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!

String类的特点

  • 字符串不可变,它们的值在创建后不能被更改

  • 虽然 String 的值是不可变的,但是它们可以被共享

  • 字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )

==号的作用

  • 比较基本数据类型:比较的是数值
  • 比较引用数据类型:比较的是地址值

比较字符串要用Object类的equals()方法,因为String类重写了该方法。

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的指向。

StringBuffer字符串缓冲区

构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。

特点:

1:可以对字符串内容进行修改。

2:是一个容器。

3:是可变长度的。

4:缓冲区中可以存储任意类型的数据。

5:最终需要变成字符串。

StringBuilder字符串缓冲区

JDK1.5出现StringBuiler;构造一个其中不带字符的字符串生成器,初始容量为 16 个字符。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

方法和StringBuffer一样;

String、StringBuffer、StringBuilder区别

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。

运行速度,执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

  String最慢的原因:

  String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

 2. 线程安全

  在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

  如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

  3. 总结一下

  String:适用于少量的字符串操作的情况

  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

 

 

 

技术图片

 

java基础总结(三)【String类】

标签:object类   stringbu   focus   java基础   ring   gif   技术   lan   bsp   

原文地址:https://www.cnblogs.com/indexlm/p/12883075.html


评论


亲,登录后才可以留言!