new String、String、String.intern()

本文深入探讨了Java中字符串的创建方式,包括在堆内存和常量池中创建的区别,以及使用new关键字和字符串常量的不同行为。通过具体代码示例,解析了字符串对象的引用比较和intern()方法的使用。

String s1 = new String("")

String s1 = new String(“abc”) 是直接在java队中创建对象然后返回引用,就像我们创建普通对象一样

public static void testNewString() {
    String s1 = new String("abc");	// java堆中创建的对象1
    String s2 = new String("abc");	// java堆中创建的对象2
    String s3 = "abc";	// 常量池中对象3
    // false----false
    System.out.println((s1 == s2) + "----" + (s2 == s3));
}

String s2 = “abc”

String s2 = "abc" 是先从常量池中查找是否有“abc”这个常量,有则返回引用,无则在常量池中创建一个常量并返回其引用

public static void testConstString() {
    String s1 = "abc";
    String s2 = "abc";
    // true
    System.out.println(s1 == s2);
}

String s3 = s1.intern()

调用此方法,先重常量池中查找是否有 s1 这个字符串,若有,返回其在常量池中的引用,若无,在常量池中创建一个相同字符串对象并返回其引用

public static void testIntern() {
    String s1 = new String("abc");	// 在java队中创建对象s1
    String s2 = s1.intern();	// 将s1拷贝到常量池中并返回其引用
    String s3 = "abc";	// 从常量池中寻找"abc"并返回其引用
    // false---true
    System.out.println((s1 == s2) + "---" + (s2 == s3));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值