Java中的值传递

 在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内存被释放掉

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值