java String常见面试题

1585364631
2023-02-18 / 0 评论 / 347 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年03月06日,已超过1135天没有更新,若内容或图片失效,请留言反馈。

AI摘要

本文解析了Java中String的两个常见面试题:变量拼接(如s2+"c")会通过StringBuilder创建新对象,导致地址不同,结果为false;而常量拼接(如"a"+"b"+"c")利用编译器优化机制直接合并为常量,共享常量池地址,结果为true。

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

评论 (0)

取消