Java基础——String类详解,实用解释

String类(不是基本数据类型)

- String的不可变性
在 Java 8 中, String 内部使用 char 数组存储数据。并且被声明为 final ,因此它不可被继承。

public final class String implements java.io.Serializable, Comparable<String>, 
CharSequence { 
 private final char value[];
}

- 为什么 Strin g`要设计成不可变的呢(不可变性的好处):

  1. 可以缓存 hash 值()
    因为 String 的 hash 值经常被使用,例如 String 用做 HashMap 的 key 。不可变的特性可以使得 hash 值也不可变,因此只需要进行一次计算。
  2. 常量池优化
    String 对象创建之后,会在字符串常量池中进行缓存,如果下次创建同样的对象时,会直接返回缓存的引用。
  3. 线程安全
    String 不可变性天生具备线程安全,可以在多个线程中安全地使用。
    字符型常量和字符串常量的区别 *
  4. 形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符
  5. 含义上: 字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)
  6. 占内存大小 字符常量占两个字节 字符串常量占若干个字节(至少一个字符结束标志)

- 什么是字符串常量池

字符串常量池位于堆内存中,专门用来存储字符串常量,可以提高内存的使用率,避免开辟多块空间存储相同的字符串,在创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用,如果不存在,则实例化一个字符串放到池中,并返回其引用。

- String 类的常用方法都有那些

  1. length() :返回字符串长度
  2. charAt() :返回指定索引处的字符
  3. substring() :截取字符串
  4. trim() :去除字符串两端空白
  5. split() :分割字符串,返回一个分割后的字符串数组。
  6. replace() :字符串替换。
  7. indexOf() :返回指定字符的索引。
  8. toLowerCase() :将字符串转成小写字母。
  9. toUpperCase() :将字符串转成大写字符。

- String和StringBuffer、StringBuilder的区别是什么?

  1. 可变性
    String 不可变, StringBuilder 和 StringBuffer 是可变的
  2. 线程安全性
    String 由于是不可变的,所以线程安全。 StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。 StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
  3. 性能
    StringBuilder > StringBuffer > String
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byg_qlh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值