2 u010775468 u010775468 于 2016.05.06 09:53 提问

java中的对象作为参数传递的问题

新人初学java,遇到这样一个问题,前几日提了这样一个问题:
void foo(A a)
{
a = new A()

}

main:
A a = null;
foo(a)
这样是改变不了a的指向的,然后我理解了java是只有值传递,所以相当于这个传的A a被复制了一份,改变的指向,是改变的复制的指向,所以原来的没有变
然后:
Class b
{
A a
}
void foo(B b)
{
b.a =new B();

}
main
B.b = new B();
b.a = null;
foo(b)
在这里引用了下别人的例子,请多见谅
这里的b也是复制的,但是我理解的是虽然是复制的,但是b.a复制的是一个引用,所以这个b,a指向的是一个空间,这样我也是理解了,但是不懂得是java里这个值传递都是复制,如果是基本数据类型(int。。。。)直接复制我懂,但是对象呢,是怎么复制的,我知道有个深度拷贝和浅度拷贝,感觉这个和浅度拷贝有点像,但是不知道对不对,求教各位,谢谢

3个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.05.06 09:58
已采纳
Object a = new A(); 
a = new B();

开始a--->A
执行到a=new B();
a---->B,但如果A没有被java回收的话,A还在,只是a指向了B这个新对象。
u010775468
u010775468 谢谢,我了解了,
一年多之前 回复
bdmh
bdmh   Ds   Rxr 2016.05.06 09:58

a = new A(),只是在方法内new了一个对象,它不会改变参数,有些语言提供了对参数修改的语法,但java不行

CSDNXIAOS
CSDNXIAOS   2016.05.06 10:02

Java参数传递问题......
答案就在这里:Java参数传递问题
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

Csdn user default icon
上传中...
上传图片
插入图片