一、java面试题——String连接机制(1)
代码如下(示例):
public class Demo1Scanner {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
System.out.println(s1 = s3);
}
}
以上代码的运行结果是false。
因为当字符串之间使用+号连接时,系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成连接,连接后,再调用其toString方法转换为String类型。
s1是在字符串常量池,s3是在堆内存的,两者地址不一样所以结果是false。
二、java面试题——String连接机制(2)
代码如下(示例):
public class Demo1Scanner {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "a"+"b"+"c";
System.out.println(s1 = s2);
}
}
以上代码的运行结果是true。
是因为JAVA存在常量优化机制,在编译时,就会将"a"+“b”+“c"拼接成"abc”。
s1是在字符串常量池,s2是也是在常量池,两者一致。
注意:JAVA中当双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在,存在就直接使用,不存在就创建。所以以此方法创建的相同字符串常量,地址对比也相同