前言:
欢迎访问凯哥个人网站:www.kaigejava.com
欢迎关注凯哥公众号:凯哥Java
本文是java基础语法最后一篇。从下节课开始,我们将进入-【从零学Java】的第二阶段-->面向对象
本节内容:
1:java中的值传递及图解
2:地址值传递及图解
3:第一阶段(基础语法)总结和第二阶段预告
本文出处:《凯哥陪你学系列之java基础篇.Java基本语法篇》中第36篇基础语法完结篇- java中值传递和地址值传递And图解
声明:本文系凯哥Java(www.kaigejava.com)原创(微信id:kaigejava)。转载请注明出处
一:java中的值传递
如下图:
问题:
①、②、③中分别输出的是什么?
我们尝试着看代码来进行分析:
在①中我们知道 输出的 a=10;b=20
然后调用了change()这个方法。
所以应该先输出③。
我们来分析 在change()方法中,参数a=10 ,参数 b=20
所以 a=b,运算之后,a的值就为20了。
而 b = a+b。其实这个时候a=20了 所以b=20+20(b是不变的)
运算之后b=40了
所以 ③输出的应该是 a = 20 b=40
然后程序回到main函数中,接着往下走,就该输出②了。
那么请问②处输出多少?是 a=10 b=20 还是 a=20 b=40?
我们先运行下,看下输出结果:
接下来我们图解
图解说明:
1:先压棧。程序先运行main方法,根据棧的特点,main方法被压倒棧底。
在main方法中,int a =10 ; int b = 20; 所以①出输出的就是 a=10 b =20
2:接着change()方法进棧,然后经过运行完成之后,在change方法中 int a = 20 ;int b = 40了。所以在③处输出的a =20 b=4o
3:当棧内运行完成之后,就开始弹棧了。所以-,change方法先被弹棧。(可以理解为子弹已经出枪膛了)
4:接着main方法,所以②处输出的就是 main 方法中的a 和 b的值了。从图中我们可以看出,a = 10;b=20.所以在②处输出的是 10和20
二:地址值传递及图解
如下图:
思考:
①处应该输出的是2
②处(在changeArr方法里面的)输出的是多少?
③处输出的是多少?
分析:
因为 arr[i]%2==0 这句代码意思就是:arr中第i个元素如果模 2 == 0
才会执行arr[i]*=2这句代码的意思就是:arr[i]= arr[i]*2;
至于 模运算(%)是什么和arr[i]*=2是什么,可以回顾下之前文章。
所以②处输出的是4.
那么③应该是什么?
请看运行结果:
内存图解;
图解说明:
1:同样main函数先被压棧 到棧底
2:在堆区创建了arr数组并初始化了分别为1,2,3,4,5 所以在①输出arr第二个元素就是2
3:接着changeArr方法进棧
4:同样 将数组 arr的地址指想了changeArr方法,
5:经过changeArr方法运算之后,数组第二个元素就变成4 ,第四个元素变成8。所以在②打印出的是4
6:程序运行完成changeArr被弹棧(子弹出膛)。也就是引用arr数组的地址值被切断了。如图中被划断的
7:接着运行main方法,此时main方法中arr的地址值依然指向的是 0x0011这个。我们从堆区中可以看到,在堆区中的arr={1,4,3,8,5}
所以在③打印出arr中第二个元素就是4
三:总结
通过本节学习,我们需要掌握
1:Java中值传递和址传递的区别
值传递,值是多少,就是多少。
址传递,有可能会变化的。如果其他方法引用这个地址值之后,进行处理,那么就会影响最终结果。
下节预告:
下节开始我们将做个小项目:简单的《学生管理系统》,通过这个小项目,可以把之前学过的串联起来,一起回顾java基础语法。欢迎学习下一篇:《从零学java笔录-第37篇基础语法完结小项目练习-学生管理系统 基础版》