JVM-String:String的基本特性

String:字符串,使用一对""引起了表示。
  String s1 = “zmh”;//字面量的定义方式
  String s2 = new String(“hello”);
 
String声明为final,不可被继承
 
String实现了Serializable接口:表示字符串是支持序列化的。
     实现了Comparable接口:表示String可比较大小
 
String在jdk8及以前内部定义了final char[] value用于存储字符串数据。jdk9时改为final byte[] value。使用byte数组可以减少一半的内存,byte使用一个字节来存储一个char字符,char使用两个字节来存储一个char字符。
 
String:代表不可变的字符序列。简称:不可变性
  当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值。

@Test
    public void test01(){
        String s1 = "abc";//字母量定义的方式,“abc”存储在字符串常量池中
        String s2 = "abc";
        s1 = "hello";//这个地方修改了,不是在原有的基础修改,而是重新指向hello,不会影响s2的值

        System.out.println(s1 == s2);// false

        System.out.println(s1);
        System.out.println(s2);
    }

  当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

@Test
    public void test02(){
        String s1 = "abc";
        String s2 = "abc";
        s2 += "def";// 不能在现有"abc"的基础直接添加"def",因为定义好了一个String,底层的数组长度就固定了。而且在字符串常量池中做修改就要重新创建,体现不可变性
        System.out.println(s2);
        System.out.println(s1);
    }

  当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

@Test
    public void test03(){
        String s1 = "abc";
        String s2 = s1.replace('a','m');//如果能直接在原值上修改,那么s1和s2都变成了mbc。但不是这样的
        System.out.println(s1);
        System.out.println(s2);
    }

通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。
 
字符串常量池中是不会存储相同内容的字符串的
 ·因为String的String Pool是一个固定大小的HashTable,默认值长度是1009。如果放进String Pool的String非常多,就会造成Hash冲突严重,从而导致链表会很长,而链表长了后直接会造成的影响就是当调用String.intern时性能会大幅下降。
 ·使用-XX:StringTableSize可设置StringTable的长度。
 ·在jdk6中StringTable是固定的,就是1009的长度,所以如果常量池中的字符串过多就会导致效率下降很快。StringTableSize设置没有要求。
 ·在jdk7中,StringTable的长度默认值是60013,StringTableSize设置没有要求。
 ·jdk8开始,设置StringTable的长度的话,1009是可设置的最小值。
jdk6中:在这里插入图片描述
jdk7中:在这里插入图片描述
 
以上内容来源于:哔哩哔哩尚硅谷宋红康老师的jvm教程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值