StringTable常见面试题分析

签名:但行好事,莫问前程。

文章目录


前言

记录一下StringTable常见面试题分析。


StringTable的特性:

  • 常量池中的字符串仅是符号,第一次用到时才变为对象
  • 串池中保存的是字符串常量对象
  • 利用串池的机制,来避免重复创建字符串对象
  • 字符串变量拼接的原理是 StringBuilder (1.8)
  • 字符串常量拼接的原理是编译期优化

先看代码:

public class StringTableDemo {
    
    
    // StringTable []  串池 hashtable结构,不能扩容
    public static void main(String[] args) {
    
    
        String s1 = "a";
        String s2 = "b";
        String s3 = "ab"; // StringTable ["a","b","ab"] 当代码执行到这一步,"a","b","ab" 都被加载到串池中

        String s4 = s1 + s2; // new StringBuilder().append("a").append("b").toString() => new String("ab") 我们知道,new出来的对象都存在堆中
        System.out.println(s3 == s4); // 堆中的s4和串池中的s3不是同一个对象,所以结果是:false

        // javac 在编译期间的优化,两个常量字符串"a"和"b"的拼接结果就是字符串"ab"
        String s5 = "a" + "b"; // 当代码执行到这一步,会先去串池中找有没有“ab”字符串对象,没有的话,将“ab”字符串加入串池;有的话,直接引用串池中的“ab”对象
        System.out.println(s3 == s5); // s3和s5都是指向串池中的“ab”字符串对象,所以结果是:true
    }
}

运行结果:

在这里插入图片描述


总结

博客主要记录了StringTable常见面试题分析,有啥错误或不足地方请指正,如果对你有所帮助,请一键三连。

猜你喜欢

转载自blog.csdn.net/YangCunle/article/details/129798139
今日推荐