Java方法的参数传递(三——“不可变对象”的引用变量作为参数对非“不可变对象”的引用变量作为方法参数传递进行总结,认为“引用变量”型实参对所引用对象的改变是“以不变应万变”;而在“不可变对象”的引用变量作为方法参数传递时,“引用变量”型实参及其所引用对象都是“不变”的!那么,又是谁在改变,或者改变了什么?这就是百味峰爷将在《Java方法的参数传递(三》中进行总结的内容。一、什么是“不可变对象”?编程过程中,有时候需要禁止某个“对象”被改动内容。为此,Java提供了Immutable类(譬如String类,该类的对象被称为“不可变对象”。根据定义,“不可变对象”是一种一旦构建好就不再变化的“对象”,在其生存期间不可被改变内容。那么,Java中有哪些系统定义的Immutable类?名气最大的就是String类!除了它,还有就是8种基本类型对应的8个包装类(WrapperClass:Byte、Short、Character、Integer、Long、Float、Double、Boolean。二、理论分析Java类中方法以“不可变对象”的“引用变量”作为形参,与《Java方法的参数传递(二》总结的“可变变量”的“引用变量”作为形参,在方法参数的传递过程中,有以下共同点:形参和实参在栈内存中同样都有各自独立的存储区。参数传递时,将“引用变量”实参的存储区中所存储数据(实参值进行复制,“复制值”存入“引用变量”形参的存储区;因为“实参值”是特定“对象”在堆内存中存储的首地址,所以参数传递操作使得形参和实参一样成为该“对象”的引用变量,即指向相同的堆内存区。那么,不同点又在何处?“可变变量”的“引用变量”作为形参,参数传递之后,形参和实参共同引用的“对象”在堆内存(Heap中所分配到的存储区固定不变,而这个存储区内存放的内容可以变换!“不可变对象”的“引用变量”作为形参,参数传递之后,最初形参和实参共同引用一个相同的“对象”。但是,当试图改变这个共同引用的“对象”时,形参和实参就开始“分道扬镳”了!原因在于试图改变共引“对象”时,新创建了一个“新对象”,所做的改变都发生在“新对象”;那共引的“对象”呢?它仍然存在,而且丝毫不变地存在;只是形参不再像实参那样忠贞地引用它,转而喜新厌旧地去引用“新对象”了。既然实参引用的还是老“对象”,而形参引用的是“新对象”,形参和实参就成了分手后的“陌生人”,不再相往来。如此一来,形参的任何变化都不会影响实参。三、:lassImmutableAsParameterDemo{publicstaticvoidmain(String[]args{ImmutableAsParameterDemoimmutableAsParameterDemo=newImmutableAsParameterDemo(;(;}privatevoidTest({StringoriginalStr="Immutableobject";("“引用变量”实参originalStr在调用方法之前所引用的对象:"+originalStr;(;simpleCha
Java方法的参数传递(三) 来自淘豆网m.daumloan.com转载请标明出处.