Java 字符串常量池

String str1 = “abc”;
String str2 = “abc”;
String str3 = “abc”;
String str4 = new String(“abc”);
String str5 = new String(“abc”);

面试题一:String str4 = new String(“abc”) 创建多少个对象?

str4:
字符串常量池:"abc" : 1个
堆:new String("abc") :1个
引用:str4 :1个
总共 :3个

面试题二:String str1 = new String("A"+"B") ; 会创建多少个对象? 

str1:
字符串常量池:"A","B","AB" : 3个
堆:new String("AB") :1个
引用:str1 :1个
总共 :5个


面试题三:String str2 = new String("ABC") + "ABC" ; 会创建多少个对象?

str2 :
字符串常量池:"ABC" : 1个
堆:new String("ABC") :1个
引用:str2 :1个
总共 :3个

当调用 intern() 方法时,编译器会将字符串添加到常量池中(stringTable维护),并返回指向该常量的引用

String s1 = "Hello";
String s2 = new StringBuffer("He").append("llo").toString();
String s3 = s2.intern();


System.out.println("s1 == s2? " + (s1 == s2)); // false
System.out.println("s1 == s3? " + (s1 == s3)); // true

1

原文地址:https://www.cnblogs.com/staff/p/14932089.html