Code前端首页关于Code前端联系我们

Java面试题:String、StringBuilder、StringBuffer有什么区别?

terry 2年前 (2023-09-25) 阅读数 60 #后端开发

问:String、StringBuilder、StringBuffer有什么区别?

答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以存储和服务字符串。 String是只读字符串,也就是说String指向的字符串的内容不能被改变。 StringBuffer/StringBuilder类表示的字符串对象可以直接修改。 StringBuilder是在Java 5中引入的。它的方法与StringBuffer相同。不同的是它是在单线程环境下使用的。由于它的各个方面都不是同步的,所以它的效率比StringBuffer要高。

面试问题1 - 什么情况下使用+运算符连接字符串比调用StringBuffer/StringBuilder对象的append方法连接字符串效果更好?

面试问题2 - 请告诉我以下程序的输出。

class StringEqualTest {

    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(s2 == s2.intern());
    }
}

java面试题:String和StringBuilder、StringBuffer的区别?

补充:为了回答上面的面试题,需要明确两点:1.String对象的内部方法获取常量池中字符串对象对应版本的引用(如果存在字符串)包含与String对象相等的常量池(结果为true),如果常量池中没有对应的字符串,则将该字符串添加到常量池中,然后在常量池中就会有对该字符串的引用恒极已经回归; 2、字符串的+操作的本质是创建一个StringBuilder。添加对象,然后使用 toString 方法将拆分的 StringBuilder 对象处理为 String 对象。您可以通过使用 javap -c StringEqualTest.class 命令来获取与类文件对应的 JVM 字节码指令来查看这一点。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门