Java String、StringBuffer、StringBuilder类详解

Java String、StringBuffer、StringBuilder类介绍

Immutable 类

String类是典型的 Immutable 类,本身是final class,同时String的value属性也被声明成final类型。不可变保证了String的线程安全。
在这里插入图片描述

String 的初始化

String 类的初始化主要有两种方式: 直接赋值和对象初始化
直接赋值:

String s = "12345";

直接赋值会将String内容写入方法区的内存常量池。而JVM会维护一份String字面量列表,保证相同值的String都会指向一片空间。
对象初始化

String s = new String("12345");

String对象初始化后会在堆区创建一个对象,有可能会被垃圾回收,同时两次new相同值的String不会指向同一地址。

String t1 = new String("1111");
String t2 = new String("1111");
System.out.println(t1 == t2); //false
System.out.println(t1.equals(t2));//true

String的拼接-StringBuffer、StringBuilder

String的不可变导致了对String的修改必须生成新的String对象。
String三种拼接方式 : + 、StringBuilder、StringBuffer
先说结论: StringBuilder > StringBuffer > 使用 加号 拼接
先说 StringBuilder 为什么比 + 快
String 每次拼接都要重新开辟一个大小等于新字符串大小的空间,而StringBuilder会在初始化对象的时候开辟字符串大小+16的空间,当额外空间用光的时候新申请空间的时候也会预留出一段空间,这样一定程度避免了对象拼接时需要不断新申请空间的问题。
在说 StringBuilder 为什么比StringBuffer快
StringBuilder和StringBuffer 都继承自AbstractStringBuilder,区别就是StringBuffer为了保证线程安全,在所有方法上都添加了synchronized。相比StringBuilder增加加锁解锁时间。

在非要求线程安全的情况下推荐使用StringBuilder。

String的拼接后续-机智的JVM

JVM在使用+拼接字符串的时候会自动调用SpringBuilder

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值