Java引用与地址盲点
2013-04-17 23:46
148 查看
一直以为Java中引用和地址是一个概念,容易混淆,下面的小程序让我加深了对引用的理解。
之前以为会打印10 0 \n 10,结果如下:
![](C:\Users\weizeng\Desktop\QQ截图20130417231658.png)
在amethod()方法调用another()方法的v=vh之前,amethod方法把v的引用的值传给了another方法中的v(其实可以是ValHold类型的任何名称),这样another方法中所有对v的操作都会修改amethod中v的指向的对象。所以第二行打印20,然后v=vh,把v指向了新的地址了(新对象),所以第一行打印10 0,此时amethod中的v和another中的v不是同一个引用,another中的v只在其方法块内是有效的,但amethod中的v仍然指向原来的对象地址。
对象引用变化如下:
public class Test { public static void main(String[] args){ Test t = new Test(); t.amethod(); } public void amethod(){ int i=99; ValHold v = new ValHold(); v.i=30; another(v,i); System.out.println(v.i); } public void another(ValHold v,int i){ i=0; v.i=20; ValHold vh = new ValHold(); v=vh; System.out.println(v.i+" "+i); } class ValHold{ int i = 10; } }
之前以为会打印10 0 \n 10,结果如下:
![](C:\Users\weizeng\Desktop\QQ截图20130417231658.png)
在amethod()方法调用another()方法的v=vh之前,amethod方法把v的引用的值传给了another方法中的v(其实可以是ValHold类型的任何名称),这样another方法中所有对v的操作都会修改amethod中v的指向的对象。所以第二行打印20,然后v=vh,把v指向了新的地址了(新对象),所以第一行打印10 0,此时amethod中的v和another中的v不是同一个引用,another中的v只在其方法块内是有效的,但amethod中的v仍然指向原来的对象地址。
对象引用变化如下:
![](D:\20130417_233751.jpg)
相关文章推荐
- 对java对象的地址引用及值引用
- Java中对对象的操作是引用操作-建立Temp对象是,应该在循环里面new一个新的地址,再使用add添加到集合中去
- 详解java的值传递、地址传递、引用传递
- 【Java】AKKA文档(java版)—角色的引用、路径和地址
- Java中的值传递和地址传递(传值、传引用)
- Java面向对象【经典案例】数组是对象,其变量的值是引用地址
- java引用传递和c地址传递
- C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用
- C++与Java,C#的异同(一):值,地址,引用
- java引用传递和对象传递的区别(对象在方法中传递时,仅仅传的是地址的副本)
- java引用地址传递的实例
- java 值传递与地址传递(引用)的区别
- Java对象句柄(指针,引用地址)
- Java中如何获取对象(引用)地址?
- java中的地址引用
- Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递
- [java]引用类型传的是地址
- java 值传递 引用传递(又叫地址传递,对象传递)
- Java中引用变量的使用_传引用就是传地址。因为"传地址数值"比"传对象的拷贝" 简单 。
- Java中集合list的add方法添加的是地址(引用)不是值