Java值传递以及引用的传递、数组的传递_第1页
Java值传递以及引用的传递、数组的传递_第2页
Java值传递以及引用的传递、数组的传递_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java值传递以及引用的传递、数组的传递!!许多编程语言都有2种方法将参数传递给方法----按值传递和按引用传递。与其他语言不同,Java不允许程序员选择按值传递还是按引用传递各个参数,基本tsa类型(byte--short--int--long--float--double--boolea的变量总)是按值传递。就对象而言,不是将对象本身传递给方法,而是将对象的的引用或者说对象的首地址传递给方法,引用本身是按值传递的是说,讲引用的副本传递给方法(副本就是说明对象此时有两个引用了),通过对象的引用,方法可以直接操作该对象(当操作该对象时才能改变该对象,而操作引用时源对象是没有改变的)。tsa现在说说数组:如果将单个基本类型数组的元素传递给方法,并在方法中对其进行修改,则在被调用方法结束执行时,该元素中存储的并不是修改后的值,因为这种元素是按值传递,如果传递的是数组的引用,则对数组元素的后续修改可以在原始数组中反映出来(因为数组本身就是个对象,int[]a=newint[这里面的^七是数组元素的类型,而数组元素的修改是操作对象)。对于单个非基本类型数组的元素在方法中修改,则在被调用方法结束执行时,该元素中存储的是修改后的值,因为这种元素是按引用传递的,对象的改动将在源数组的数组元素中反映出来。卜面看个小程序:publicclassTest(2.3.Stringstr=newString(〃good〃);char[]ch=('a','b','c'};inti=10;publicvoidchange(Stringstr,char[]ch,inti)(7.3.str="testok”;ch[0]='g';i++;}12.publicstaticvoidmain(String[]args)(14.Testtt=newTest();tt.change(tt.str,tt.ch,tt.i);System.out.println(tt.i);System.out.print(tt.str+"and");System.out.println(tt.ch);}}str是String类型的引用,i是基本类型变量,ch是数组名,也是数组对象的引用在chang()方法里,str="testok",是一个新的对象把首地址放在引用变量str上;而ch[0]='g';因为传的是数组的引用,而此时ch[0]='g';是对数组元素的操作,能修改源数组的内容;i是整型值,只是把值copy了一份给方法,在方法的变化是不改变的源i的。所以结果是:10goodandgbc现在咱们把代码变化一下:publicclassTest(2.Stringstr=newString("good");char[]ch={'a','b','c'};inti=10;publicvoidchange(Stringstr,charch,inti)(7.str="testok";ch='g';this.i=i+1;}12.publicstaticvoidmain(String[]args)(14.Testtt=newTest();tt.change(tt.str,tt.ch[0],tt.i);System.out.println(tt.i);TOC\o"1-5"\h\zSystem.out.print(tt.str+"and");System.out.println(tt.ch);}}仔细观察下实参以及入参有何变化?change()方法里的入参char[]ch变成charch;这次传递的是个char值的单个数组元素,按照上面的解析,此时ch='9'是不影响源数组元素的。this.i=i+1;这里面等号左边的i是属性i,等号右边的i是局部变量(入参里的i);此时i+1后赋值给属性的1,自然会改变属性i的值,同时17行,tt.i又是调用属性的i,这次的结果是:11goodandabc现在是不是有点明白了?那好再看下面一个小程序publicclassTest(2.publicvoidchange(StringBufferx,StringBuffery)(4.x.append(y);y=x;}publicstaticvoidmain(String[]args)(9.StringBufferbuffA=newStringBuffer("a");StringBufferbuffB=newStringBuffer("b");newTest().change(buffA,buffB);System.out.println(buffA+","+buffB);}}这次传递的是两个对象的引用的值,在方法change()里的x.append(y),其中引用x调用api方法append()修改了newStringBuffer("a");的内容。y=x;是一个修改内容的对象把首地址赋值给引用变量y了,此时操作的是引用,而先前y是newStringBuffer("b");的引用变量,所以输出结果是:ab,b下面是个稍难的小程序,先自己用笔画画过程,写出自己的结果,而后再上机操作下,如果自己的结果和在电脑上的结果一样,那么再碰到这类题就不难了,如果不一样,回头仔细体会下我前面的讲解,找找原因。publicclassTest(2.privateStringnn=newString("1");privateString[]mm=("2","5"};5.voidtest(Stringnn,String[]mm)(7.nn=newString("3”);this.nn="9";10.mm[0]="4";System.out.println("intest(),mm[0]:"+mm[0]);mm=newString[]("8","7"};System.out.println("intest(),nn:"+nn);System.out.println("this.nn:"+this.nn);System.out.println

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论