String创建问题
//测试String对象是否相同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); //false
System.out.println(s1 == s5); //true
System.out.println(s1 == s6); //false
System.out.println(s1 == s6.intern()); //true
System.out.println(s2 == s2.intern()); //false
求助大佬,
字符串连接 + 使用StringBuilder实现,那么s1和s5为什么会是一个对象?s5的获得不应该是 new StringBuilder.append("Program").append("ming").toString(),s5应该是一个新的字符串对象呀?
{:10_266:} String s5 = "Program" + "ming"; 这句在编译的时候,会编译成:String s5 = "Programming"; 前提: String 类的数据是存放在静态常量池里面的
原因1: 如果常量池里已经定义一个字符串了,再次定义时,会优先在常量池里找,看有没有一样的内容,如果有,就直接引用原先常量池的地址了;
原因2:"=="表示的就是比较栈中存储的数据,所以结果为true 同楼上,静态常量池的作用
页:
[1]