Java一些简单但重要的基础知识

269

1、String a = "123"; String b = "123"; a==b 吗?

知识点:内存,String存储方式等 结论:

String a = "123";
String b = "123";
System.out.println(a == b);
 
答案:true

Java虚拟机管理的内存,包含以下几个运行时数据区:

image.png

在方法区中有一个部分是运行时常量池。Class文件中有一项信息就是常量池表,用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。

  • String a = "123";
    • 123:为编译期可确定的内容将维护在常量池中;
    • a: 指的是一个引用,引用的内容是等号右边数据在常量池中的地址 String b = "123";会先去常量池找123,若找到就直接将b引用指向改地址。

总体来说就是先看常量池中有没有要创建的数据,有就返回数据的地址,没有就创建一个

        String a = new String("123");
        String b = new String("123");
        System.out.println(a == b);
        
        答案:false

因为新创建的对象是存储在堆中的,没有上述的缓存机制。