172.16.0.151_20200831-陈政平
问题
public static void main(String[] args) {
final String x = "疑是" ;
final String y = "地上霜" ;
String s = "疑是地上霜" ;
String p = x + y ; // 注意这里的 + 起连接作用(连接字符串)
System.out.println( s == p ); // true
String q = x + "地上霜" ;
System.out.println( s == q ); // true
String w = "疑是" + y ;
System.out.println( s == w ); // true
String e = "疑是" + "地上霜" ;
System.out.println( s == e ); // true
}
public static void main(String[] args) {
String x = "疑是" ;
String y = "地上霜" ;
String s = "疑是地上霜" ;
// StringBuilder builder = new StringBuilder( x ); // 在缓冲区中存放 "疑是"
// builder.append( y ); // 在缓冲区末尾追加 "地上霜"
// String p = builder.toString(); // 将缓冲区中的内容 构造 成 String实例 (即创建新的String实例)
String p = x + y ; // 注意这里的 + 起连接作用(连接字符串)
System.out.println( s == p ); // falsefinal String x = "疑是" ;
1.
final String x = "疑是" ;
final String y = "地上霜" ;
String p = x + y ;
此时的 "疑是" , "地上霜" 放在字符串池中还是放在缓冲区中。如果是在字符串池中,那么String p = x + y ;p算不算是创建了一个新的String实例?如果是新创建的实例,那么String p = x + y是存在于字符串池中吗?
2.
第二段代码中的System.out.println( s == p );输出false是因为
// String p = builder.toString(); // 将缓冲区中的内容 构造 成 String实例 (即创建新的String实例)。这个String实例 存在于字符串池中吗?
那么String s = "疑是地上霜" ;是否存在于字符串池中,如果存在于字符串池中,为什么他们之间会输出false?且第二段代码中的
String x = "疑是" ;
String y = "地上霜" ;存在于缓冲区和常量池中两个地方都有吗?
吐槽
对细节的知识点掌握的不好,理解的不透彻。
点赞