日期:2011-01-26 02:54:00 来源:本站整理
JAVA里面办法调用时传对象参数的陷阱[Java编程]
本文“JAVA里面办法调用时传对象参数的陷阱[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
近似的问题,又被人问到了几次,决意还是简单总结一下吧.这个问题,一些熟行已经很清楚了,但有时也会很不当心的被XX了一把.
其实问题的核心,就是参数固然是传的引用,但参数就是参数,他自身是一个本地的部分引用罢了,只不过在这个时刻和调用者指向了同一个对象.但并不代表这个部分引用在整个办法调用期间内能始终和调用者保持一致.
下面是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
但愿这个例子能解开一些初学者的疑问.
以上是“JAVA里面办法调用时传对象参数的陷阱[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论