Stirng,StringBuffer and StringBuilder

String概述

String被声明为final,因此它不可被继承。(Integet等包装类也不能被继承)
在Java8中,String内部使用char数组存储数据。

public final class String 
		implements java.io.Serializable,Comparable<String>, CharSquence{
		/** The value is used for character storage. */
		private final char value[];
}

在Java9之后,String内部使用byte数组存储字符串,同时使用code来标识使用了哪种编码。
value 数组被声明为 final,这意味着 value 数组初始化之后就不能再引用其它数组。并且 String 内部没有改变 value 数组的方法,因此可以保证 String 不可变。

不可变的好处

  1. 可以缓存hash值
    因为 String 的 hash 值经常被使用,例如 String 用做 HashMap 的 key。不可变的特性可以使得 hash 值也不可变,因此只需要进行一次计算。
  2. String Pool
    如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。

在这里插入图片描述
3. 安全性
String经常作为参数,String不可变形可以保证参数不可变。
4.线程安全
String不可变性天生具备线程安全,可以在多个线程中安全使用

String StringBuilder StringBuffer

  1. 可变性
  • String不可变的
  • StringBuilder和StringBuffer可变
  1. 线程安全
  • String不可变,因此是线程安全的
  • StringBuilder不是线程安全的
  • StringBuffer是线程安全的,内部使用synchronized进行同步

StringPool

字符串常量池。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值