String类型 堆/字符串池的理解

package test;

public class StringTest {

    public static void main(String[] args) {

        /**
         * 创建过程:
         * 1.检查StringPool(字符串池)里是否有"aaa"对象,这里没有,创建StringPool的字符串对象"aaa"
         * 2.在jvm堆里创建字符串对象"aaa"
         * 所以,这里创建了2个对象
         */
        String s = new String("aaa");

        /**
         * 创建过程:
         * 1.检查StringPool(字符串池)里是否有"aaa"对象,因为上面已经创建过,所以这里不再创建
         * 所以,这里并没有创建对象
         */
        String s2 = "aaa";

        /**
         * 创建过程:
         * 1.检查StringPool(字符串池)里是否有"aaa"对象,因为上面已经创建过,所以这里不再创建
         * 2.在jvm堆里创建字符串对象"aaa"
         * 所以,这里创建了1个对象
         */
        String s3 = new String("aaa");

        /**
         * intern方法的作用:返回调用对象的字符串池里的字符串对象的引用
         */
        String s4 = s.intern();

        String hello = "hello";
        String hel = "hel";
        String lo = "lo";

        /**
         * 打印true
         * 如果右边计算不涉及变量计算,全部都是常量,不会产生新的对象
         * 所以返回的是字符串池里的对象引用
         */
        System.out.println(hello == "hel" + "lo");
        /**
         * 打印false
         * 右边计算涉及变量计算,有对象操作,会产生一个新的对象
         * 所以返回的是堆的对象引用
         */
        System.out.println(hello == "hel" + lo);
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值