代码对象的创建流程说明如下:
String str1 = "hello" + " java";可以看成 String str1 ="hello java"; 在字符串常量池查找是否已经存在“hello java”的字符串常量对象,未找到则创建字符串"hello java",str1指向该对象并且将该对象放到字符串常量池。
String str2 = "hello java"; 该创建过程为:去字符串常量池查找是否有“hello java”的字符串对象,因为刚才已经创建了一个在常量池的对象,直接返回该对象,所以str1和str2是指向同一个对象的字符串。
String str3 ="hello";在常量池查找是否包含该“hello”的字符串对象,不存在创建一个新的字符串对象给str3,放入常量池。String str4 = "java" ,在常量池查找是否包含该“java”的字符串对象,不存在创建一个新的字符串对象给str4,放入常量池。这个时候str3和str4不是同一个对象。
String str3 = str3 +str4; 因为String是final不可变的对象类型,这个操作实际上是创建了一个新的StringBuilder然后toString方法创建了一个新的字符串对象。所以str3依旧不等于str2和str1。
请问字符串常量池里的常量是永久保存吗
还有虽然他俩值一样 但不是两个对象吗