从零学java笔录-第36篇基础语法完结篇- java中值传递和地址值传递And图解

前言:

欢迎访问凯哥个人网站: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篇基础语法完结小项目练习-学生管理系统 基础版》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,586评论 4 12
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,585评论 0 9
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,323评论 0 2
  • 本节主要内容: 1:一维数组在动态赋值在内存中图解。 2:本节总结&下节预告 本文出处:《凯哥陪你学系列之java...
    凯哥Java阅读 235评论 0 1
  • 05.01_Java语言基础(数组概述和定义格式说明)(了解) A:为什么要有数组(容器)为了存储同种数据类型的多...
    NgNono阅读 143评论 0 0