一文读懂java中方法的参数传递

结论:方法调用的时候涉及到参数传递的问题,实际上传递的是变量中具体的值;

首先看两个例子:

1.传递参数中保存的是一个字面值

代码如下:

class Test01 
{
	public static void main(String[] args) 
	{
		int i = 10;
		add(i);
		System.out.println("main方法中i的值是:"+i);//10
	}

	public void static add(int i){
		i++;
		System.out.println("add方法中i的值是:"+i);//11
	}
}

上面代码的输出值是多少:

main方法中i的值是:10

add方法中i的值是:11

为什么上面的输出会不一样呢?

原因是当程序执行到add方法时,将u的字面值10传递进add方法,在add方法中对u++,所以add方法中的输出是11。因为而当程序回到main方法中,u的值还是10。

上面这个例子的内存图如下:

在这里插入图片描述

2.传递参数中保存的是一个地址

代码如下:

public class  Test02
{
	public static void main(String[] args) 
	{
		User u = new User(20);
		add(u);//这里调用add方法传递的值u里面保存的java对象的地址
		System.out.println("main中u.age的值是:"+u.age);//21
	}
	public static void add(User u){
		u.age++;
		System.out.println("add中u.age的值是:"+u.age);//21
	}
}

class User 
{
	int age;
	public User(int age){
		this.age = age;
	}
}

例2代码的输出值是多少?

main方法中i的值是:21

add方法中i的值是:21

为什么会是这样的输出呢?

因为这个例子中u是一个引用变量,其传递给add方法的是它保存的java对象在堆内存的地址,说白了就是一个地址。因此当代码执行到add方法中的时候,u.age++给age这个实例变量加1,所以add方法中的输出是21。那为什么main方法中的变量也是21呢?这是因为add方法的参数传递了u其中保存的地址,所以当执行完add方法后,程序回到main方法中,u的还是指向同样的User对象,所以u.age的值是21。

例2的内存图如下:

在这里插入图片描述

3.总结:

上面例子的唯一的区别是,一般变量其中保存的是字面值,而引用类型的变量其中保存的是它指向对象在堆内存的地址。进行参数传递的时候,都传的是变量中保存的值,只不过上面例子传递值中保存的内容不一样。例子1变量传递都在栈区进行,而例2变量传递值涉及堆区和栈区。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值