java运行时内存分五部分:
线程共享:堆内存、方法区(包括常量池)
线程私有:栈内存、本地方法栈、程序计数器
string不是基本数据类型,那么一个string的内存位置是什么呢?一共有两种情况:
1、string直接赋值:
String s = "haha";
s的引用存在栈内存中,引用指向的haha存在方法区的常量池中(先判断常量池中是否有一个haha,存在则直接指向)
2、string对象new创建
String s = new String("haha");
s的引用存在于栈内存中,引用指向的haha对象,存在堆内存中(每new一次,在堆中创建一个新的haha对象)
总结:
1、string类型的引用,都是存在栈内存中的;
2、string引用指向,直接赋值存在栈内存,new出来的存在栈内存。
时间: 2024-11-20 04:24:34