java String 在内存中如何存储的?
引自:
http://javaconceptoftheday.com/how-the-strings-are-stored-in-the-memory/
在java中,内存分成两个区域stack 和 heap , stack 用于运行(包括变量引用和逻辑运行),heap 用于存储变量实体。java中对String对象特殊对待,所以在heap区域分成了两块,一块是String constant pool,用于存储java字符串常量对象,另一块用于存储普通对象及字符串对象。
而string的创建有两种方法:String a = "abc"; String b=new String("abc");
对于第一种,jvm会首先在String constant pool 中寻找是否已经存在"abc"常量,如果没有则创建该常量,并且将此常量的引用返回给String a;如果已有"abc" 常量,则直接返回String constant pool 中“abc” 的引用给String a.此创建方法之会在String constant pool中创建对象。
对于第二种,jvm会直接在非String constant pool 中创建字符串对象,并不会把"abc” 加入到String constant pool中,并把该对象 引用返回给String b;
如果创建字符串代码如下:
String s1 = "abc"; String s2 = "xyz"; String s3 = "123"; String s4 = "A"; String s5 = newString("abc"); char[] c = {"J","A","V","A"}; String s6 = newString(c); String s7 = newString(newStringBuffer());
字符串在内存中的存储情况如下图所示:
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: thinkphp---display与fetch区别
- 下一篇: VB.net中获取二维数组的元素个数
copyright © 2008-2019 亿联网络 版权所有 备案号:粤ICP备14031511号-2