标签:分析 java String 静态 存放 内存 new 变量名 常量
java 中的内存分为四个部分:
stack(栈):存放基本类型的数据和对象的引用,即存放局部变量。
Note:
如果存放的是基本类型数据(非静态变量),则直接将变量名和值存入stack中。
如果存放的是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中)。
heap(堆)存放 new 出来的东西。
data segment(数据区):分为静态区和常量区(常量池)
静态区(static segment):
存放在对象中用 static 定义的静态成员(即静态变量,如果该静态变量是基本类型变量,则将变量名和值都存入静态区中,如果是引用类型则指向 new 出来的对象。
常量池(constant pool):
存放在编译期被确定,并被保存在已编译的 .class 文件中的一些数据。如代码中基本类型和引用类型(String、Class、数组、Integer等包装类)的常量值(final)。此外,这里还存放一些以文本形式出现的符号引用(如:字段的名称和描述符、方法的名称和描述符、类和接口的全限定名)。
code segment(代码区):存放代码。
【图示】
1:注意比较静态变量和非静态变量的变量名、变量值所存储位置的区别:
2:对于值相同的 String 常量,在 constant pool 中只会创建一个。
对于 String s3 = new String("s3");
创建了两个 String 对象,一个是在编译期间通过""双引号创建的,另一个是在运行期间 new 出来的。
标签:分析,java,String,静态,存放,内存,new,变量名,常量 来源: https://www.cnblogs.com/whzhao2000/p/12769765.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。