都说string name="zlz"是创建了两个对象,一个是缓存池里的,一个是堆里的,怎么看出来啊?
直接用反射就得了呗。
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
String name ="zlz";
String name2 = new String("zlz");
Field field = String.class.getDeclaredField("value");
field.setAccessible(true);
char[]value1,value2;
value1 = (char[]) field.get(name);
value2 = (char[]) field.get(name2);
System.out.println(value1==value2);
}
本文通过Java代码示例深入探讨了String对象在Java中的创建方式及其在内存中的存储位置,包括常量池和堆内存的区别。通过反射机制获取String内部的value字段,比较了直接赋值和new关键字创建的String对象在内存中的表现。
710

被折叠的 条评论
为什么被折叠?



