Java:字符串在JVM常量池中是如何存储的呢?

2024-11-18 09:42:09
推荐回答(2个)
回答(1):

首先你要知道jvm常量池也是对象池,它和在堆中的存储没有区别(底层存储都是一样的,只是对象之间的引用有差别)。那为什么要有常量池呢?因为它可以节省时间和空间,当需要一个对象的时候,可以直接从常量池中获取,而不需要重新创建,这样也就节省了时间和空间(常量池判断对象是否存在应该是equals方法)。
除了String外,Java的8种基本类型(Byte, Short, Integer, Long, Character, Boolean, Float, Double)除Float和Double以外,其它六种都实现了常量池。
楼主这么好学,我出个题目给楼主:
Integer i = 127;
Integer j = 127;
System.out.println(i == j);
提示:对象存在常量池

Integer m = 128;
Integer n = 128;
System.out.println(m == n);
提示:对象存在堆内存

回答(2):

堆内存相当于书的正文,常量池相当于目录
s1就是目录上的常量,指向正文的"java"所在的堆的位置