Java 中new String(“字面量“)

本文深入探讨了Java中字符串常量池的工作原理,通过代码示例解释了`intern()`方法如何影响字符串对象的引用。文章分析了不同创建字符串的方式下,`intern()`方法的返回值比较,帮助读者理解Java内存管理的细节。
摘要由CSDN通过智能技术生成
public class Test {

    public static void main(String[] args) {
        /**
         * 理解是这样的:
         * 1处代码的"1"在编译期间就已经放入常量池了,然后类加载后放入了运行时常量池(生成一个"1"的对象,将其引用放入) 然后生成一个"1"的字符串对象由s指向(这个对象并不在常量池中)
         * 2处代码查看s这个对象的字符串内容"1"已经在字符串常量池了,就不将s的引用放入常量池了
         * 3处代码s2引用的是常量池中的引用 所以最后结果是false
         *
         * 4处代码将"hel" 和"lo"分别创造对象,并保存其引用到常量池,然后生成一个新的String对象 s3内容为"hello"
         * 5处代码发现s3的内容hello没有在常量池中,就将s3引用放入常量池
         * 6处代码等于直接引用的s3 所以最后结果是true
         * */
       String s = new String("1"); // 1
       s.intern(); // 2
       String s2 = "1"; // 3
       // false
        System.out.println(s == s2);

        String s3 = new String("hel") + new String("lo"); // 4
        s3.intern(); // 5
        String s4 = "hello"; // 6
        // true
        System.out.println(s3 == s4);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值