String相关面试题。。。

469 阅读1分钟

前言

正文

String s = "hello" + "world";
问:创建了几个对象?
答案:1个
原因: jvm编译期整合成 String s = "helloworld" 了,直接存于常量池中。

String str = "a" + new String("b");
问:创建了几个对象?
答案:5个
原因: 常量池中有a和b,堆中有new的b和ab,还有StringBuilder对象。
PS:字符串相加+,实际上最后会转换成new builder().append()的形式

问:以下代码输出结果

	String str1 = new StringBuilder("计算机").append("软件").toString();
        String str2 = new StringBuilder().append("1234").toString();
        String str3 = new StringBuilder("123").append("asd").toString();
        String str4 = new StringBuilder("ja").append("va").toString();
        System.out.println(str1==str1.intern());
        System.out.println(str2==str2.intern());
        System.out.println(str3==str3.intern());
        System.out.println(str4==str4.intern());

PS:
intern():
当常量池中不存在"abc"这个字符串的引用,将这个对象的引用加入常量池,返回这个对象的引用。
当常量池中存在"abc"这个字符串的引用,返回这个对象的引用。

答案:

true
false
true
false

原因: