Persion ps =new Persion("张三","20");
全局数据区域: Static
栈内存:ps
堆内存:name=“张三” age=“20”
String str="hello"; 直接赋值方式 只开辟了一块堆内存空间
如果追加字符 word,
就是堆内存空间发生变化
堆内存空间的内容没有发生改变
String str=“hello”;
String str1=“hello”;
String str2=“hello”;
栈内存 堆内存 栈内存中的都指向堆内存中的hello
str hello
str1
str2
str +=“word”; 堆内存中就会出现一个word
随后堆内存中又会出现一个 hello word
然后Str的引用地址连接到 hello word
此时 word变为垃圾
String str=new String("hello");构造方法赋值 内存地址会不同
hello 匿名对象开辟堆内存
new 开辟堆内存空间
new 开辟的堆内存空间地址赋值给str
hello 变成垃圾
所以会伴随大量垃圾产生
引用传递的本质 同一块堆内存空间,同时被多个栈内存指向,不同的栈可以修改同一块堆内存的内容
所以说String声明完不可改变,其实改变的是堆内存的指向而已
全局数据区域: Static
栈内存:ps
堆内存:name=“张三” age=“20”
String str="hello"; 直接赋值方式 只开辟了一块堆内存空间
如果追加字符 word,
就是堆内存空间发生变化
堆内存空间的内容没有发生改变
String str=“hello”;
String str1=“hello”;
String str2=“hello”;
栈内存 堆内存 栈内存中的都指向堆内存中的hello
str hello
str1
str2
str +=“word”; 堆内存中就会出现一个word
随后堆内存中又会出现一个 hello word
然后Str的引用地址连接到 hello word
此时 word变为垃圾
String str=new String("hello");构造方法赋值 内存地址会不同
hello 匿名对象开辟堆内存
new 开辟堆内存空间
new 开辟的堆内存空间地址赋值给str
hello 变成垃圾
所以会伴随大量垃圾产生
引用传递的本质 同一块堆内存空间,同时被多个栈内存指向,不同的栈可以修改同一块堆内存的内容
所以说String声明完不可改变,其实改变的是堆内存的指向而已