您的位置:首页 > 编程语言 > Java开发

Java中字符串内存位置

2017-09-06 20:40 429 查看

前言

总结一下:基本类型的变量数据和对象的引用都是放在栈里面的,对象本身放在堆里面,显式的String常量放在常量池,String对象放在堆中。

常量池的说明

常量池之前是放在方法区里面的,也就是在永久代里面的,从JDK7开始移到了堆里面。

String内存位置说明

显式的String常量

String a = "test";
String b = "test";


第一句代码执行后就在常量池中创建了一个值为test的String对象;
第二句执行时,因为常量池中存在test所以就不再创建新的String对象了。
此时该字符串的引用在虚拟机栈里面。

String对象

String a = new String("testObj");
String b = new String("testObj");


Class被加载时就在常量池中创建了一个值为testObj的String对象,第一句执行时会在堆里创建new String("testObj")对象;
第二句执行时,因为常量池中存在testObj所以就不再创建新的String对象了,直接在堆里创建new String("testObj")对象。

验证一下

/**
*
*/
public class Client {
public static void main(String[] args){
String str1 = "abcd";
String str2 = "abcd";
System.out.println(str1==str2);//true

String str3 = new String("abcdabcd");
String str4 = new String("abcdabcd");
System.out.println(str3==str4);//false
}
}


返回结果:

true
false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: