java中实参和形参_java中参数传递机制---形参和实参

形参

用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。

1 public void swap(int a, int b) {

2 int temp = a;

3 a = b;

4 b = temp;

5 System.out.println("a:" + a + " b:" + b);

6 }

7

8 这里边的a,b就是形参,temp是一个局部变量,方法结束,在栈空间中就会被销毁

实参

传递给被调用方法的值,预先创建并赋予确定值。

1 调用上面的

2 swap(1,2);

3 其中1和2就是实际的参数值,就叫实参

传值调用

传值调用中传递的参数为基本数据类型,参数视为形参。

1 public class TestArgsTransform {

2 public static void main(String[] args) {

3 int i = 10;

4 int j = 5;

5 TestArgsTransform tt = new TestArgsTransform();

6 System.out.println("i:" + i + " j:" + j);

7 tt.swap(i, j);

8 System.out.println("i:" + i + " j:" + j);

9

10

11 }

12

13 public void swap(int a, int b) {

14 int temp = a;

15 a = b;

16 b = temp;

17 System.out.println("a:" + a + " b:" + b);

18 }

19

20

21 }

22 这里我们写了一个基本的数据类型,实现两个int型数据交换的方法,并且在main()方法中调用,然而结果却并不是我们想要的

运行结果如下图所示:

b4a56edcead078c68e2c1d63c01a0941.png

就是因为基本数据类型是属于传值调用,当我们要实现交换时,方法内可以完成交换,只是实参进行了交换,方法结束,栈空间中就会销毁swap()方法内的局部变量,所以当调用swap()时,最终值还是实参的初始化值,并没有被修改。值改变作用到了形参,而不会到实参

传引用调用

传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。

1 package com.argstransform;

2 //参数传递:

3 //形参:方法声明时,方法小括号内的参数

4 //实参: 调用方法时,实际传入的参数值

5

6 //java中传递值得机制:

7 //形参是基本数据类型的: 将实参的值传递给实参的基本数据类型的变量

8 //形参是引用数据类型的: 将实参的引用类型的值(即在堆空间中生成的首地址的值)传递给形参的引用类型的变量

9

10 public class TestDemo1 {

11 public static void main(String[] args) {

12 TestDemo1 td = new TestDemo1();

13 Data data = new Data();

14 System.out.println("data.i:"+data.i+" data.j:"+data.j);

15 //调用

16 td.swap(data);

17 System.out.println("data.i:"+data.i+" data.j:"+data.j);

18

19 }

20

21 public void swap(Data data) {

22 int temp = data.i;

23 data.i = data.j;

24 data.j = temp;

25 }

26 }

27

28 class Data {

29 int i = 10;

30 int j = 5;

31 }

//形参部分直接传进去了一个对象,相当于堆空间的首地址值得引用

运行结果:

a15c4ff665a3f34795e69e9b1dbc39d6.png

总结

1.java的基本数据类型是传值调用,对象引用类型是传引用。

2.当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参。

3.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。

转自:

https://www.cnblogs.com/yaoruozi/p/8569906.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值