现在的位置: 首页 > 综合 > 正文

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

2015年02月03日 ⁄ 综合 ⁄ 共 1286字 ⁄ 字号 评论关闭

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

注释写得很清楚了,我就不多说了。

我说说我的结论,其实在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);
	}
}

抱歉!评论已关闭.