Java值传递和赋值规则

  • Post author:
  • Post category:java


方法内变量的赋值规则:

如果变量是基本数据类型,此时赋值的是变量所保存的

数据值。


如果变量是引用数据类型,此时赋值的是变量所保存的

数据的地址值。

System.out.println("***********基本数据类型:****************");
		int m = 10;
		int n = m;//直接在栈中给n赋值一个新的10


System.out.println("***********引用数据类型:****************");
		
		Order o1 = new Order();
		o1.orderId = 1001;
		
		Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。注:对象实体(数据)是用一个 (因为o2没有new新对象)


针对于方法的参数概念


形参:方法定义时,声明的小括号内的参数

实参:方法调用时,实际传递给形参的数据



java中参数传递机制:值传递(面试)

规则:

  • 如果参数是基本数据类型,此时

    实参

    赋给

    形参

    的是

    实参真实存储

    的数据值。

所以在下图的main方法中swap()后输出m,n并没有改变。改变的是swap()中形参的值。

这里swap和main中的变量值都在栈中,swap方法执行完temp和形参mn会出栈。

在这里插入图片描述

如果参数是引用数据类型,此时

实参

赋给

形参

的是实参存储数据的

地址值

。如下:

swap方法执行完后,temp 和形参data会出栈。但是原来的data和堆中的对象还在并且已经完成了交换。main方法执行完了最下面的data才会出栈,然后没有指针指向对象0x7788,对象也会出堆(销毁)

所以上图中的swap()方法要想实现main中数据的交换应该用数组swap(int[] arr,int i,int j)

在这里插入图片描述

在这里插入图片描述



版权声明:本文为dougongzi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。