Java中的值传递和引用传递的区别.doc

Java中的值传递和引用传递的区别.doc

ID:62033712

大小:16.50 KB

页数:3页

时间:2021-04-15

Java中的值传递和引用传递的区别.doc_第1页
Java中的值传递和引用传递的区别.doc_第2页
Java中的值传递和引用传递的区别.doc_第3页
资源描述:

《Java中的值传递和引用传递的区别.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、java中值传递和引用传递区别2011-07-09 18:48【转】java中值传递和引用传递区别java中的八大基本数据类型:intlongfloatdouble short byte charboolean看 似一样的方法,程序输出的结果却不太一样.changeObj()方法真正的把输入的参数改变了,而changePri()方法对输入的参数没有任何的改变。从这个例子知道Java对对象和基本的数据类型的处理是不一样的.和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数

2、的一个拷贝,所有的函数体内部的操作都是针对这个拷贝的操作,函数执行结束后,这个局部变量也就完成了它的使命,它影响不到作为输入参数的变量。ﻫ这种方式的参数传递 被称为"值传递"。而在Java中用对象的作为入口参数的传递则缺省为"引用传递”,也就是说仅仅传递了对象的一个”引用”,这个"引 用”的概念同C语言中的指针引用是一样的。当函数体内部对输入变量改变时,实质上就是在对这个对象 的直接操作。ﻫclassMyDemo{ﻫpublicstatic void operate(StringBufferx,StringBuffer y) {ﻫx.append(y);ﻫy =x;ﻫSystem.ou

3、t。println(x+",” +y);}ﻫpublic staticvoidmain(String[]args){StringBuffera =newStringBuffer("A”);ﻫStringBufferb=newStringBuffer("B");operate(a,b);System。out。println(a +",”+b);ﻫ}ﻫ}结果:ﻫAB,ABAB,B解释:ﻫ很明显你这里传递的是地址(引用)传递2个StringBuffer对象!ﻫ注意啦:x会指向a所指向的内存(可以理解为都指向A),y会指向b所指向的内存,(可以理解为都指向B)ﻫx.append(y);//这句

4、话把y指向的值追加给x指向的值,这个时候x和a 指向的内存都是AB,y指向的内存仍然是Bﻫy=x;//这句话就是把x的值 附值给 y,附的是地址! ﻫ这样 a,y,x 同时值向AB,b仍然指向B ﻫSystem。out。println(x+”,”+y);这里所以打印AB,AB System.out.println(a+","+b);这里所以打印AB ,Bﻫ引用参数的传递是把原来的地址传递给新的变量,原来引用的仍然在那里!ﻫ下面还是例子:ﻫ//在函数中传递基本数据类型, public classTest{  ﻫpublicstatic void change(inti,intj){ in

5、ttemp= i; i=j;ﻫj=temp;ﻫ} ﻫﻫpublic staticvoidmain(String[]args){  ﻫinta = 3; intb=4; change(a,b);  System.out.println(”a="+a);System。out。println("b="+b); ﻫ}}结果为:  a=3 b=4ﻫ原因就是参数中传递的是 基本类型a和 b 的拷贝,在函数中交换的也是那份拷贝的值而不是数据本身;publicclassTest{ ﻫpublicstaticvoidchange(int[]counts){counts[0] = 6;   ﻫSystem

6、。out。println(counts[0]); } ﻫpublicstaticvoidmain(String[]args) { ﻫint[]count={1, 2, 3,4, 5 }; change(count);}ﻫ}ﻫ结果是:6 ﻫ在方法中传递引用数据类型int数组,实际上传递的是其引用count的拷贝,他们都指向数组对象,在方法中可以改变数组对象的内容。即:对复制的引用所调用的方法更改的是同一个对象。 这个要和下面的比较下:classA{  ﻫint i=0; } ﻫﻫpublic class Test{  publicstaticvoidadd(Aa) {  ﻫa = new

7、A(); ﻫa。i++; }ﻫﻫpublicstaticvoid main(String args[]) {A a=newA();add(a);ﻫSystem。out.println(a.i);ﻫ} ﻫ}  ﻫﻫ输出结果是0 ﻫ在该程序中,对象的引用指向的是A ,而在change方法中,传递的引用的一份副本则指向了一个新的OBJECT,并对其进行操作. ﻫ而原来的A对象并没有发生任何变化。 引用指向的是还是原来的A对象。classA {ﻫint

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。