本文主要讲述String创建的内存分布
示例代码如下:
1 public class StringExercise { 2 public static void main(String[] args) { 3 // 创建方式不止这两种 4 String s1 = "zwz"; 5 /** 6 * String类的成员:private final char value[]; 7 * public String(String original) { 8 * this.value = original.value; 9 * this.hash = original.hash; 10 * } 11 */ 12 String s2 = new String ("zwz"); 13 System.out.println(s1 == s2); // false 14 } 15 }
内存分布图,如下图所示:
注意:String类的成员:private final char value[],即字符串常量永远存储在常量池中,value是指向字符串常量的地址。
String s1 = "zwz";
zwz字符串存放方法区的常量池中,将其地址直接返回给s1
String s2 = new String ("zwz");
在堆中开辟存储空间,创建String类的对象,value初始化为null,zwz字符串存放方法区的常量池中,并将其地址返回给value,再将String类对象的地址返回给s2。
标签:java,String,s2,s1,zwz,value,细节,常量 From: https://www.cnblogs.com/zwgitOne123/p/17007495.html