【代码】
class Demo
{
String temp = "hello" ;
}
public class RefDemo03
{
public static void main(String args[])
{ Demo d1 = new Demo() ;
d1.temp = "world" ;
System.out.println("fun()调用前:" + d1.temp) ;
fun(d1) ;
System.out.println("fun()调用:" + d1.temp) ;
}
public static void fun(Demo d2) //d2会不会在栈中创建对象,并在堆中分配内存给d2使用?
{
d2.temp = "JAVA";
}
}
【问题】
在栈中会不会创建对象d2,以及在堆中会不会额外分配内存给d2使用?
------解决思路----------------------
传的是索引,对象本身不会copy
------解决思路----------------------
对象的创建在堆中,方法栈中的对象变量指向堆中的具体对象信息。
------解决思路----------------------
传的只是引用!就是d2和d1同时指向同一块堆中的对象!
------解决思路----------------------
对,其实相当于传进去的是对象的引用地址的拷贝,在栈中相当于有了两个栈引用可以指向堆中创建对象时所分配的内存空间,在fun方法里你是通过一个拷贝引用然后间接修改了实际堆内存中的对象。这时用原来的对象引用去访问堆内存时,相应的属性已经被修改了