java String常见面试题
1.
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
System.out.println(s1 == s3);
结果:false
""内会直接在字符串StringTable创建相应常量,变量记录常量的地址,StringTable区的值能共享,但是s2 + "c",c会在StringTable区新建,随后通过StringBuilder进行拼接,s3记录的是拼接后的toString的方法地址,所以结果为false
2.
String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2);
结果:true
java有常量优化机制,会将多个常量拼接为一个整体,字节码文件中,会将a+b+c拼接成abc,因为s1已经在常量池存放了abc,又因为常量池中有共享机制,所以最终s2的内容也是常量池的地址,所以最终s1等于s2
评论 (0)