[Java]方法参数是基本数据类型和引用数据类型

Java方法参数详解
本文深入解析Java中方法参数的传递机制,对比基本数据类型与引用数据类型的参数传递区别,通过实例展示参数如何在堆和栈中存储及变化。

方法参数是引用数据类型时

  • 示例1
package Demo;

public class Person {
	String name;
}

package Demo;

public class Test_1 {
	public static void main (String[] args){		/*main方法压栈运行*/
		Person p = new Person();		/*定义了一个person类的对象p,p.name赋初值null,person类进堆占用一部分内存*/
		p.name ="张三";     	/*这里给p.name赋值"张三",p.name由null变成张三*/
		System.out.println(p.name);		/*输出p.name*/
		function(p);		/*调用function,function也进栈,function方法运行完毕后出栈*/
		System.out.println(p.name);		/*输出p.name*/
	}
	public static void function (Person t){
		t.name = "李四";			/*给传入的person对象的name赋值为"李四"*/
	}		/*main方法完成后出栈,但堆中用过的内存暂时不会被释放(需要被虚拟机释放)*/
}

运行结果:

张三
李四
  • 理解
    引用数据类型作为方法的参数,类似于c语言中的指针。对于这个示例来讲的话,function(p)是直接对堆中p.name之前存储的"张三"进行了一个替换,直接从根本上改变了数据,这种改变是永久性的,而不是暂时性的。

方法参数是基本数据类型时

  • 示例2
package Demo;

public class Test_2 {
	public static void main (String[] args){
		int a = 9;
		System.out.println(a);
		function(a);
		System.out.println(a);
	}
	public static void function (int a){
		a += 8;
	}

}

运行结果

9
9

  • 理解
    示例中在main方法中先对a赋值为9,进行了一次输出a,这次的值为9,相信这一点大家都理解,而后调用了function方法,将a的值更改为了17,这时再进行a的值输出的话不应该是17吗,但为什么还输出了9呢?
    类似示例1的main方法进栈运行,但调用到function方法时,它的参数却不同于示例1,它的参数同它一起存储在方法栈中,而不是存储在堆中,因此,参数传入后,进行+8运算,a的值更新在function方法中为17,但随着function方法的运行结束,function出栈,连带着存储在它中的a一起消去。回到main函数中,再次进行对a的值的输出就仍旧是最初的值9了。

以上理解和阐述若有哪里不足敬请读者们指正哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值