Java字符串原理

一、字符串拼接的底层原理:

1.如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串;

        String s1="abc";
        String s2="a"+"b"+"c";
        System.out.println(s1==s2);//true

 s1是直接赋值的,受串池管理,s2在拼接时没有变量,就会触发字符串优化机制,在编译时生成class文件时,会将"a"+"b"+"c"拼接为"abc",所以在编译运行时也就是直接赋值的方式,就会复用串池中管理的地址,所以s1和s2记录的地址值一样,所以是true

2.如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存

        String s1="abc";
        String s2="ab";
        String s3=s2+"c";
        System.out.println(s1==s3);//false

==号比较引用数据类型比较的是地址值,因为s1是直接赋值,记录的是串池中的地址,s3有变量参与,所以会在堆中new一个新的对象,是不受串池管理的,所以记录的是堆中的地址,所以是false

二、StringBuilder原理分析:

StringBuilder默认容量是16,如果想添加超过16的就会扩容成(原来的容量*2+2),如果想添加超过扩容后的,比如要添加36个,就会以实际长度为准(容量:最多装多少;长度:已经装了多少)

package Test10;

public class StringDemo14 {
    public static void main(String[] args) {
        StringBuilder sb=new StringBuilder();
        System.out.println(sb.capacity());//16
        System.out.println(sb.length());//0
        sb.append("abcdefghijklmnopqrstuvwxyz0123456789");
        System.out.println(sb.capacity());//36
        System.out.println(sb.length());//36
    }
}

 运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值