Java String StringPool StringBuilder StringBuffer详解,面试不再难

本文详细探讨了Java中的String对象,包括String的不可变性、内部存储变化(从字符数组到字节数组)、以及new String()与String.valueOf()的区别。文章还介绍了JVM的字符串缓存StringPool,以及如何通过intern()方法使用它。此外,文章比较了StringBuffer和StringBuilder的使用场景和性能差异,建议在大量字符串拼接时考虑初始化容量以避免性能损耗。
摘要由CSDN通过智能技术生成

概览

String在java中并不是值类型,而是对象;和其它包装类型一样被设计成不可变对象;String类声明final类型,所以也不能被继承。
在Java 8中,String内部使用字符数组存储数据。

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

在Java 9中,String内部使用byte数组存储数据,同时使用coder来标识字符串的编码信息。

public final class String
   implements java.io.Serializable, Comparable<String>, CharSequence {
   
   /** The value is used for character storage. */
   private final byte[] value;
   /** The identifier of the encoding used to encode the bytes in {@code value}. */
   private final byte coder;
}

String类的内部将value声明为final常量字段,并在内部没有提供任何修改value字段的方法,保证了不可变性。(value被声明成final类型后也只能被赋值一次,其后就不能再对其进行修改,这是final的特性)

new String(“abc”)与String.valueOf(“abc”)的区别

String a = new String("abc");
String b = new String(
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值