方法内变量的赋值规则:
如果变量是基本数据类型,此时赋值的是变量所保存的
数据值。
如果变量是引用数据类型,此时赋值的是变量所保存的
数据的地址值。
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 版权协议,转载请附上原文出处链接和本声明。