Java基础_0310:引用传递

Posted 徐伟的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础_0310:引用传递相关的知识,希望对你有一定的参考价值。

引用传递

引用传递是Java之中最让初学者费解的概念,而在实际的开发之中,引用传递又有着非常重要的作用;
引用传递的核心在于同一块堆内存空间被不同的栈内存所指向;

范例:第一道引用传递范例

class Message {
	private int num = 10;		// 定义int基本类型的属性
	/**
	 * 本类没有提供无参构造方法,而是提供有参构造,可以接收num属性的内容
	 * @param num 接收num属性的内容
	 */
	public Message(int num) {
		this.num = num;	// 为num属性赋值
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getNum() {
		return this.num;
	}
}
public class TestDemo {
	public static void main(String args[]) {
		Message msg = new Message(30);	// 实例化Message类对象同时传递num属性内容
		fun(msg); 		// 引用传递
		System.out.println(msg.getNum());	// 输出num属性内容
	}
	/**
	 * 修改Message类中的num属性内容
	 * @param temp Message类的引用
 	 */
	public static void fun(Message temp) {
		temp.setNum(100);		// 修改num属性内容
	}
}


程序执行结果:	100

范例:第二道引用范例

public class TestDemo {
	public static void main(String args[]) {
		String msg = "Hello";		// 定义String类对象
		fun(msg);			// 引用传递
		System.out.println(msg);	// 输出msg对象内容
	}
	public static void fun(String temp) {	// 接收字符串引用
		temp = "World";		// 改变字符串引用
	}
}

程序执行结果:Hello

范例:第三道引用传递

class Message {
	private String info = "此内容无用" ;		// 定义String类型属性		
	public Message(String info) {		// 利用构造方法设置info属性内容
		this.info = info ;
	}
	public void setInfo(String info) {
		this.info = info ;
	}
	public String getInfo() {
		return this.info ;
	}
}
public class TestDemo {
	public static void main(String args[]) {
		Message msg = new Message("Hello") ;	// 实例化Message类对象
		fun(msg) ;								// 引用传递
		System.out.println(msg.getInfo()) ;	// 输出info属性内容
	}
	public static void fun(Message temp) {	// 接收Message类引用
		temp.setInfo("World") ;		// 修改info属性内容
	}
}
程序执行结果:World

以上是关于Java基础_0310:引用传递的主要内容,如果未能解决你的问题,请参考以下文章

一道经典面试题:字符串在Java中如何通过“引用”传递

Java的参数传递是「按值传递」还是「按引用传递」?

JAVA基础知识_对象

尝试在空对象引用上调用接口方法“____”[重复]

Android 我应该在异步任务中将片段作为弱引用传递吗?

java是值传递还是引用传递?