Java方法的参数传递(二——非“不可变对象”的引用变量作为参数Java对于引用类型的参数传递,与8种基本数据类型的参数传递不同。对于基本数据类型的数据作为方法参数,是按值传递(passingbyvalue,即将实参变量所指向的栈内存临时存储区所存储数据(即实参变量的值进行复制,然后传递给形参变量首先,要弄明白两个不同的概念:对象,引用变量。对象是类的实例,存储位置位于“堆”(Heap中。引用变量是存放对应“对象”存储区之首地址的变量,存储位置位于“栈”中。因此,百味峰爷认为所谓以“对象”作为Java方法参数的说法不准确,更为准确的描述应该是“引用变量作为Java方法参数”。一、理论分析Java类中方法以“引用变量”作为形参,形参和实参在栈内存中都有各自独立的存储区。参数传递时,将“引用变量”实参的存储区中所存储数据(实参值进行复制,“复制值”存入“引用变量”形参的存储区。因为“实参值”是特定“对象”在堆内存中存储的首地址,所以参数传递操作使得形参和实参一样成为该“对象”的引用变量,即指向相同的堆内存区。二、:classDemo{inttemp;}lassParameterPassingDemo02{publicstaticvoidmain(String[]args{DemoactualParameter=newDemo(;=80;("fun(调用前实参actualParameter的值:"+;fun(actualParameter;//("fun(调用后实参actualParameter的值:"+;}publicstaticvoidfun(DemoformalParameter{//=888;}}运行结果为:三、分析从以上分析可以看出,实参actualParameter并未发生改变,改变的是其引用的对象newDemo(。实参actualParameter是“以不变应万变”,以自身的不变来应付所引用对象newDemo(的万变。四、对于“引用变量”作为方法参数,实参是否都能够“以不变应万变”?答案:否!接下来,百味峰爷试着做出如下的分析。编程过程中,有时候需要禁止某个“对象”被改动内容。为此,Java提供了Immutable类(譬如String类,该类的对象被称为“不可变对象”。根据定义,“不可变对象”是一种一旦构建好就不再变化的“对象”,在其生存期间不可被改变内容。对于这类对象,实参仍然不会发生变化,但是它所引用的对象也没有变化,因此谈不上“以不变应万变”,而是“不变”应“不变”。那么变化的是谁呢?百味峰爷计划在《Java方法的参数传递(三》再行总结。actualParameterTemp=0DemoactualParameter=newDemo(;actualParameterTemp==80;actualParameterformalParameterTemp=888
Java方法的参数传递 来自淘豆网m.daumloan.com转载请标明出处.