首页 > 其他 > 详细

JVM字符串常量池StringTable

时间:2020-07-19 20:52:39      阅读:69      评论:0      收藏:0      [点我收藏+]

String的基本特性

  • String:字符串,使用一对""引起来表示。
    • String sl = "hello";//字面量的定义方式;
    • String s2 = new String("hello") ;
  • String类是已经被声明为final的, 不可被继承。
  • String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小
  • String在jdk8及以前内部定义为“private final char value[]”用于存储字符串数据。jdk9时改为byte[]
  • 自jdk9以来,String再也不用char[] 来存储了,改成了byte[] 加上字符编码集的标识,节约了一些空间。基于字符串的内容,决定用何种编码去存储。特定的编码集如ISO-8859--1/Latin-1:一个character字符采用一个字节存储。其他编码集如UTF-16:一个character字符采用2个字节存储。中文字符也是采用2个字节存储。
  • StringBuffer和StringBuilder也做了一些修改。

jdk1.9的String结构示例:

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

 

String不可变的字符序列

简称:不可变性。

  • 当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值。
  • 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
  • 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
  • 通过字面量的方式(不同于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。字符串常量池当中的字符串不允许重复存放
未完...

JVM字符串常量池StringTable

原文:https://www.cnblogs.com/yanl55555/p/13340760.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!