58同城的java字符串常量池

面试题code

public class StringPool58Demo {
    public static void main(String[] args) {
        String str1 = new StringBuilder("58").append("tongcheng").toString();//58 tongcheng换成ali baba,zi jie,mei tuan,re dis 都是true
        System.out.println(str1);
        System.out.println(str1.intern());
        System.out.println(str1 == str1.intern());

        System.out.println();

        String str2 = new StringBuilder("ja").append("va").toString();
        System.out.println(str2);
        System.out.println(str2.intern());
        System.out.println(str2 == str2.intern());

    }
}

讲解

intern()方法

  • 源码+解释
    image-1667174691630
    image-1667174700729

why

  • 按照代码结果,java字符串答案为false
  • 必然是两个不同的java,那另外一个java字符串如何加载进来的?
  • 为什么
    • 有一个初始化的java字符串(JDK出娘胎自带的),在加载sun.misc.Version这个类的时候进入常量池

OpenJDK8底层源码说明

  • 递推步骤
    • System代码解析
      • System
        image-1667174812366
        • initializeSystemClass
          image-1667174856122
          • Version
            image-1667174870739
    • 类加载器和rt.jar
      • 根加载器提前部署加载rt.jar
        image-1667174894903
    • OpenJDK8源码

考查点

  • intern()方法,判断true/false?
    • 《深入理解Java虚拟机》书原题,是否读过经典JVM书籍
      image-1667174958633

最近的文章

字节跳动两数求和

面试题字节快手面试复盘力扣第一题:两数之和题目说明https://leetcode.cn/problems/two-sum/解法暴力法:通过双重循环遍历数组中所有元素的两两组合,当出现符合的和时,返回两个元素的下标哈希(更优解法)考查点你都想来大厂了,算法居然从来没有刷过??呵呵机会偏爱有准备有实力…

继续阅读
更早的文章

八股文集锦

面试题集锦京东1.AQS阿里巴巴1.redis+mysql2.MQ3.多线程4.缓存雪崩5.synchronized锁6.volatile,cas7.threadLocal8.jvm9.分布式锁58同城1.redis2.jvm快手1.MySQL2.Java基础3.spring循环依赖总结1.计算机经…

继续阅读