快速业务通道

JAVA编程:方法调用传对象参数 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24

JAVA编程:方法调用传对象参数

时间:2010-05-21 老紫竹的家

下面是2个测试,分别测试可修改的Object和不可修改的

/** * JAVA里面对象参数的陷阱 * * @author 老紫竹的家(laozizhu.com) * */ public class Test { public static void main(String[] args) { TestValue tv = new TestValue(); tv.first(); TestInteger ti = new TestInteger(); ti.first(); } } class TestValue { class Value { public int i = 15; } // 初始化 Value v = new Value(); public void first() { // 当然是15 System.out.println(v.i); // 第一次调用 second(v); System.out.println(v.i); third(v); System.out.println(v.i); } public void second(Value v) { // 此时这里的v是一个局部变量 // 和类属性的v相等 System.out.println(v == this.v); v.i = 20; } public void third(Value v) { // 重新设置一个对象 v = new Value(); // 此时这里的v也是一个局部变量 // 但和类属性的v已经不相等了 // 修改这个v指向对象的数值,已经不影响类里面的属性v了。 System.out.println(v == this.v); v.i = 25; } } class TestInteger { // 初始化 Integer v = new Integer(15); public void first() { // 当然是15 System.out.println(v); // 第一次调用 second(v); System.out.println(v); third(v); System.out.println(v); } public void second(Integer v) { // 此时这里的v是一个局部变量 // 和类属性的v相等 System.out.println(v == this.v); // 但这一句和前面的不同,虽然也是给引用赋值,但因为Integer是不可修改的 // 所以这里会生成一个新的对象。 v = 20; // 当然,他们也不再相等 System.out.println(v == this.v); } public void third(Integer v) { // 重新设置一个对象 v = new Integer(25); // 此时这里的v也是一个局部变量 // 但和类属性的v已经不相等了 // 修改这个v指向对象的数值,已经不影响类里面的属性v了。 System.out.println(v == this.v); } }

运行结果

15 true 20 false 20 15 true false 15 false 15

希望这个例子能解开一些初学者的疑问。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号