欢迎来到天天文库
浏览记录
ID:37513539
大小:378.00 KB
页数:8页
时间:2019-05-24
《Delphi数据库基础》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、353附录1参数传递附录1参数传递1.1传值还是传引用Java中的参数传递容易引起混淆,尤其是对于那些有过C/C++经历的读者。在C/C++中参数传递既有传值,又有传引用,而在Java中只存在传值方式的参数传递,但是由于Java中又有引用的概念,这就使得参数传递容易引起初学者的混淆。本节以实例详细分析了参数传递过程,力求给读者一个清晰的认识。下面先从较简单的基本变量类型的参数传递谈起。1.2基本数据类型的参数传递先来看下面这段代码:publicclassParaTest{publicstatic
2、voidchangeValue(intx){//x称为形式参数x++;}}在应用程序的某个地方,存在如下调用:intbonus=100;ParaTest.changeValue(bonus);//bonus称为实际参数当上面两行代码执行完毕后,bonus的值是什么呢?答案是bonus仍为100。我们来详细分析一下为什么是这个结果:执行intbonus=100后,变量bonus的值为100(图1.1(a))。当执行语句ParaTest.changeValue(bonus)时,由于Java使用传值方
3、式传递参数,所以bonus的值将首先复制一份传递给x,这时计算机的存储区中会同时存在两个独立的变量bonus和x,并且这两个变量的值相等(图1.1(b))。执行changeValue的方法体时,x的值增加了1,由于bonus和x是两个独立的变量,因此x值的增加不会影响到bonus(图1.1(c))。当方法执行完毕后,x不再有效,但bonus的值没有改变(图1.1(d))。所有基本数据类型的参数传递都和上述过程类似,为此可以有如下结论:当参数为基本数据类型时,参数传递时将实际参数的值复制一份传递给
4、方法的形式参数,形式参数值的改变不会影响所传入实际参数的值。353附录1参数传递图1.1基本变量类型的参数传递1.3对象数据类型的参数传递1.3.1参数为单个对象下面来看一下参数为对象数据类型时是什么情况:首先生成一个字符串对象:StringaStr=newString("abc");由前面的知识我们已经知道,对象变量aStr是指向字符串对象“abc”的一个引用。这时,如果类ParaTest中有一个方法:publicstaticvoidchangeStr(Stringstr){//str为形式参
5、数str=str+"cde";}在应用程序的某个地方,存在如下调用:StringaStr=newString("abc");ParaTest.changeStr(aStr);//aStr为实际参数那么当上面两行代码执行完毕后,aStr所指对象的内容是什么呢?有的读者可能会这样分析:由于aStr是指向字符串对象“abc”的一个引用,在调用方法changeStr后,aStr所指对象的字符串变为了“abccde”。这样的分析看似正确,实际上不正确。正确的结论是,aStr所指对象的字符串仍然为“abc”
6、。353附录1参数传递我们来分析一下:当执行完语句StringaStr=newString("abc")时,对象变量aStr指向字符串对象“abc”(图1.2(a));执行语句ParaTest.changeStr(aStr)时,尽管aStr是对象的一个引用,但由于Java使用传值方式传递参数,所以aStr的值(对象的引用)将首先复制一份传递给对象变量str,这时计算机的存储区中会同时存在两个独立的对象变量aStr和str,这两个对象变量均指向字符串对象“abc”(图1.2(b))。执行chang
7、eStr的方法体时,系统新生成一个字符串对象“abccde”并赋值给str,这时str将指向对象“abccde”(图1.2(c))。由于aStr和str是两个独立的对象变量,str所指对象的改变并不会影响到aStr所指的对象,即aStr仍旧指向原来的字符串对象“abc”。当方法执行完毕后,str不再有效,会在适当的时候被回收,但aStr所指对象依旧没有改变(图1.2(d))。图1.2状态不可转换对象变量类型的参数传递到这里问题是不是就结束了呢?下面再来看一个例子:如果类ParaTest中有一个方
8、法:publicstaticvoidchangeStrBuf(StringBufferstr){str.append("cde");}在应用程序的某个地方,存在如下调用:StringBufferaStrBuf=newStringBuffer("abc");ParaTest.changeStrBuf(aStrBuf);那么当上面两行代码执行完毕后,aStrBuf所指的对象是什么呢?按照上面的分析,有的读者或许会认为aStrBuf所指的对象不变,仍为“abc”。但实际上正确的结果是aStrBuf所指
此文档下载收益归作者所有