在Java中方法参数的传递,都是值传递,对象传递是地址 ,基本数据类型传递的是值。地址和值都值。
下面以一个例子来看内存中的数据变化情况
package com.mapbar.util;
/**
*
* Class Test.java
*
* Description
*
* Company mapbar
*
* author Chenll E-mail: chenlly99@Gmail.com
*
* Version 1.0
*
* Date 2012-8-28 下午05:30:30
*/
public class Test {
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public void callMethod(Test test) {
Test test1 = new Test();
test1.setName("456");
test.setName("123");
test = test1;
System.out.println("test name:" + test.getName());
}
public static void main(String[] args) {
Test t = new Test();
t.callMethod(t);
System.out.println("t name:" + t.getName());
}
}
运行结果:
test name:456
t name:123
内存变化情况如下图:
(图一)调用方法之前实际上是声明了两个变量 test 它的作用域是方法内有效
(图二)callMethod(t); 调用方法,把t的的地址给test,他们指向同一个堆内存单元,执行这两个语句以后
test1.setName("123");
test.setName("456"); 都有了初始值
(图三)执行语句 test = test1; 把test1的地址给test test1和test 都指向同一个堆内存单元
(图四)方法调用结束,test和test1内存被释放掉