java对象与引用及参数传递
2016-09-03 15:31
369 查看
对象
对象(object)是类(class)的实例(instace)。对象一般存储在堆中。
引用
引用(reference)是对象(object)的标识符。引用存放的是该对象的地址,存放在栈中。
代码
User user = new User( );
这条语句的动作称为创建一个对象,它包含了四个动作:
右边的new People,是以Pelple类为模板,在堆空间中创建一个People类对象
结尾的(),在对象创建后,立刻调用People类的构造函数,对刚生成的对象初始化。这个例子中包含了构造函数,如果没写,java会自动帮你补上。
左侧的People one创建了一个People类的引用变量。即one是指向People对象的引用。
“=”操作符使对象引用[b]指向刚创建的People对象。注意是指向,不是赋值。[/b]
User user1 = new User( ); User user2 = new User( ); user1 = user2;
最后引用user1、user2都指向一个User对象。也就是说一个对象可以有多个引用,但一个引用最多指向一个对象。
代码中有一个User对象由于引用消失,所以该对象会交由垃圾处理器处理(可能垃圾回收器现在不收回该对象空间)。
参数传递
《thinking in Java》:When you’re passing primitives into a method,you get a distinct copy of the primitive. When you’re passing a reference into a method, you get a copy of the reference.
传递的是参数的副本 基本类型传递的是值的副本、对象传递的是引用的副本。
代码
test1:
public class TestPass1 { public static void testPass(int t){ t = 2; } public static void main(String[] args){ int t = 9; System.out.println("Before testPass: t = " + t); testPass(t); System.out.println("After testPass: t = " + t); } } out: Before testPass: t = 9 After testPass: t = 9
test2:
public class TestPass2 { public static void testPass(StringBuffer strBuf){ strBuf.append(" world"); } public static void main(String[] args){ StringBuffer strBuf = new StringBuffer("hello"); System.out.println("Before testPass: strBuf " + strBuf); testPass(strBuf); System.out.println("After testPass: strBuf " + strBuf); } } out: Before testPass: strBuf hello After testPass: strBuf hello world
test3:
public class TestPass3 { public static void testPass(StringBuffer strBuf){ strBuf = new StringBuffer(" world"); } public static void main(String[] args){ StringBuffer strBuf = new StringBuffer("hello"); System.out.println("Before testPass: strBuf " + strBuf); testPass(strBuf); System.out.println("After testPass: strBuf " + strBuf); } } out: Before testPass: strBuf hello After testPass: strBuf hello
refence:
相关文章推荐
- Java对象、对象引用关系及参数传递讨论
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- Java对象、对象引用关系及参数传递讨论
- Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)
- 在Java中方法参数的传递,对象是传递引用
- Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
- Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 在Java中方法参数的传递,对象是传递引用
- Java传递基本类型:值传递,对象作为参数:引用传递
- [Java] Java参数传递,究竟值传递还是引用对象(转)
- 关于Java对象作为参数传递是传值还是传引用的问题
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 【java】值传递和引用传递---对象作为方法的参数传入属于哪种传递
- 【JSF心得】JAVA的对象传递是引用传递
- Java中的原生数据类型和引用类型的参数传递
- Java方法强制传递引用参数(做为返回值),改变被传递参数值。
- .net中引用传递对象作为参数传递的问题
- Java学习笔记---6.面向对象编程01-类对象的构建及对象的引用传递
- Java函数参数的值传递和引用传递
- Java中的参数传递到底是引用还是值传递?