一段代码让你秒懂java方法究竟是传值还是传地址

先看看代码以及执行结果:

凝视写得非常清楚了。我就不多说了。


我说说我的结论。事实上在java中没有传值还是传址的概念,java仅仅有引用的概念。引用类似传址。只是是一个变量名中保存着对象的地址,地址指向一个对象。

引用又类似传值。对于方法来说形參和实參都是变量名,变量名中的地址是一样的,说他像传值是由于变量的值(保存的地址)是从实參传递到形參的。


上面是我的看法。欢迎大家一起讨论这个观点。


上源代码,不愿意写又想自己试试的往下看:

package com.elong.valueoraddress;

public class Student {
	private int id;
	private String name;
	private int classId;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getClassId() {
		return classId;
	}
	public void setClassId(int classId) {
		this.classId = classId;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", classId=" + classId
				+ "]";
	}
}

package com.elong.valueoraddress;

import org.junit.Test;

public class TestStudent {
	//变量名中存的是对象的地址
	@Test
	public void test() {
		Student student = new Student();
		student.setId(1);
		student.setName("elong");
		student.setClassId(1);
		//传入的是student中存放的对象地址
		change(student);
		System.out.println(student);
	}
	public void change(Student student){
		Student student2 = new Student();
		student2.setId(2);
		student2.setName("elongdeo");
		student2.setClassId(2);
		//对student指向的对象进行属性变动
		student.setId(3);
		student.setName("dingyinlong");
		student.setClassId(3);
		//student = student2表示把student2指向的对象的地址赋值给student
		student = student2;	
		//对原student2指向的对象进行属性变动
		student.setId(4);
		student.setName("yinlong");
		student.setClassId(4);
	}
}

posted @ 2015-12-17 21:49  blfshiye  阅读(265)  评论(0编辑  收藏  举报