java中对象作为方法的入参时,这个入参是否会在栈和堆中创建临时的对象

J2EE 码拜 10年前 (2015-04-04) 1368次浏览 0个评论

【代码】
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使用? 

java中对象作为方法的入参时,这个入参是否会在栈和堆中创建临时的对象
5分
传的是索引,对象本身不会copy
java中对象作为方法的入参时,这个入参是否会在栈和堆中创建临时的对象
5分
对象的创建在堆中,方法栈中的对象变量指向中的具体对象信息。
java中对象作为方法的入参时,这个入参是否会在栈和堆中创建临时的对象
10分
传的只是引用!就是d2和d1同时指向同一块中的对象!
java中对象作为方法的入参时,这个入参是否会在栈和堆中创建临时的对象
现在弄明白了,在调用fun()这个函数时,会在中创建一个变量d2,但是并不会将这个对象进行实例化(在中是不会分配内存的),这个d2用于接收入参(d1这个对象的引用,也就是d1所指向的内存地址),这样d2和d1实际上“共享了”堆内存中d1这个对象,对d2所指向的内容进行操作也会改变d1的内容的,这就像一个房间一开始只有一个门(d1)能进去,这个房间中摆放了些东西,后来又打通了一个门(d2),如果从d2这个门进去修改这个房间中的布置,你再从d1进去,看到的是修改后的房间布置。
java中对象作为方法的入参时,这个入参是否会在栈和堆中创建临时的对象
10分
对,其实相当于传进去的是对象的引用地址的拷贝,在中相当于有了两个引用可以指向堆中创建对象时所分配的内存空间,在fun方法里你是通过一个拷贝引用然后间接修改了实际堆内存中的对象。这时用原来的对象引用去访问堆内存时,相应的属性已经被修改了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java中对象作为方法的入参时,这个入参是否会在栈和堆中创建临时的对象
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!