每天一道面试题(10)--String练习题

本文通过一个Java程序示例解释了字符串对象的相等性判断以及intern()方法的作用。程序展示了`s1==s2`、`s1==s5`、`s1==s6`以及使用intern()方法后的比较结果,揭示了字符串常量池的概念和字符串拼接的底层原理。

请说出下面程序的输出

public class String_Test {
    public static void main(String[] args) {
        String s1 = "Programming";
        String s2 = new String("Programming");
        String s3 = "Program";
        String s4 = "ming";
        String s5 = "Program" + "ming";
        String s6 = s3 + s4;
        System.out.println(s1 == s2);
        System.out.println(s1 == s5);
        System.out.println(s1 == s6);
        System.out.println(s1 == s6.intern());
        System.out.println(s1 == s2.intern());
        System.out.println(s2 == s2.intern());
    }
}

结果:

false
true
false
true
true
false

解答上面的面试题需要知道如下知识点:

  1. String对象的intern()方法会得到字符串对象在常量池中对应版本的引用(如果常量池中有一个字符串与String对象的equals结果是true),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用;
  2. 字符串的+操作其本质是创建了StringBuilder对象进行append操作,然后将拼接后的StringBuilder对象用toString方法处理成String对象,这一点可以用javap-c StringEqualTest。class命令获得class文件对应的JVM字节码指令就可以看出来。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值