JVM 对象存储
Contents
https://blog.csdn.net/u010697982/article/details/45696989
基本类型数据
- 普通方法里面申明的基本类型变量的字面量和值都存在栈区,并且会复用。int a=5; int b=5; 则会在 JVM栈里指向同一个值 5
String 类型
Sring str2 = “abc”; String str3 = new String(“abc”);
编译器的处理是这样的: 先遇到String str1 = “abc”; 首先在栈中建立一个str1的引用,然后在栈中查找是否存放为”abc”的地址(“abc”存放在常量池中,引用在栈中),找到就指向它,没有就在常量池中造一个,然后也指向它。接着Sring str2 = “abc”; 因为常量池有了”abc”,所以str2就也指向它,最后到了String str3 = new String(“abc”); 先在栈中建立一个引用str3,然后去常量池中查找是否有“abc”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此“abc”对象的拷贝对象,所以,对于String str=new String(“abc”),如果常量池中原来没有”abc”则产生两个对象,否则产生一个对象