对象内存的理解
(1)对象数据存放在堆里面,
(2)基本类型的变量和对象的引用变量都在函数的栈内存中分配。
特别的 :
1.数组是对象。
2.String类型是特殊类型
下面有个例子:
String str = new String("good");
String str2 ="123";
Main ex = new Main
ex.change(ex.str,ex.str2);
System.out.print(ex.str);
System.out.println(ex.str2);
public void change(String str3,String str4) {
str3 = "test ok";
str4= "456";
}
结果:
good123
分析输出过程:
str 是一个对象的引用。
Good
存放在栈,当调
change
是引用传递,实际上
str
赋值给了成员变量
str3,
于是引用
str3
指向对象,当
str3 = "test ok";
时候,实际上新生成了一个
String
对象,
str3
指向新的对象,由于原来的对象还是持有强引用
str
,所以不会回收,打印出来的仍然是
good
。
第二个123字符串存放在栈区,
123
传入
change
实际上是值传递,
str4
刚开始指向栈区的
123
,当
str4= "456";
就会在栈区另外开辟一个地址存放
456
,
str4
指向该地址,所以输出的还是
123