JAVA面试题解惑系列(五)——传了值还是传了引用?.doc
上传人:sy****28 上传时间:2024-09-11 格式:DOC 页数:6 大小:73KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

JAVA面试题解惑系列(五)——传了值还是传了引用?.doc

JAVA面试题解惑系列(五)——传了值还是传了引用?.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

JAVA面试题解惑系列(五)——传了值还是传了引用?JAVA中的传递都是值传递吗?有没有引用传递呢?在回答这两个问题前,让我们首先来看一段代码:Java代码publicclassParamTest{//初始值为0protectedintnum=0;//为方法参数重新赋值publicvoidchange(inti){i=5;}//为方法参数重新赋值publicvoidchange(ParamTestt){ParamTesttmp=newParamTest();tmp.num=9;t=tmp;}//改变方法参数的值publicvoidadd(inti){i+=10;}//改变方法参数属性的值publicvoidadd(ParamTestpt){pt.num+=20;}publicstaticvoidmain(String[]args){ParamTestt=newParamTest();System.out.println("参数--基本类型");System.out.println("原有的值:"+t.num);//为基本类型参数重新赋值t.change(t.num);System.out.println("赋值之后:"+t.num);//为引用型参数重新赋值t.change(t);System.out.println("运算之后:"+t.num);System.out.println();t=newParamTest();System.out.println("参数--引用类型");System.out.println("原有的值:"+t.num);//改变基本类型参数的值t.add(t.num);System.out.println("赋引用后:"+t.num);//改变引用类型参数所指向对象的属性值t.add(t);System.out.println("改属性后:"+t.num);}}publicclassParamTest{//初始值为0protectedintnum=0;//为方法参数重新赋值publicvoidchange(inti){i=5;}//为方法参数重新赋值publicvoidchange(ParamTestt){ParamTesttmp=newParamTest();tmp.num=9;t=tmp;}//改变方法参数的值publicvoidadd(inti){i+=10;}//改变方法参数属性的值publicvoidadd(ParamTestpt){pt.num+=20;}publicstaticvoidmain(String[]args){ParamTestt=newParamTest();System.out.println("参数--基本类型");System.out.println("原有的值:"+t.num);//为基本类型参数重新赋值t.change(t.num);System.out.println("赋值之后:"+t.num);//为引用型参数重新赋值t.change(t);System.out.println("运算之后:"+t.num);System.out.println();t=newParamTest();System.out.println("参数--引用类型");System.out.println("原有的值:"+t.num);//改变基本类型参数的值t.add(t.num);System.out.println("赋引用后:"+t.num);//改变引用类型参数所指向对象的属性值t.add(t);System.out.println("改属性后:"+t.num);}}这段代码的运行结果如下:参数--基本类型原有的值:0赋值之后:0运算之后:0参数--引用类型原有的值:0赋引用后:0改属性后:20从上面这个直观的结果中我们很容易得出如下结论:对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。方法体内对参数进行运算,不影响原有变量的值。方法体内对参数所指向对象的属性进行运算,将改变原有变量所指向对象的属性值。上面总结出来的不过是我们所看到的表面现象。那么,为什么会出现这样的现象呢?这就要说到值传递和引用传