欢迎关注头条号:老顾聊技术
精品原创技术分享,知识的组装工
目录
前言基本与引用型别案例一案例二案例三案例四总结前言
不同的程式设计,引数的传递分为按值传递和按引用传递。按值传递表示方法接收是引数的值,而引用传递表示方法接收的是变数的地址。
小伙伴们是不是觉得这个应该很简单啊,JAVA按照传值原则的啊。那小伙伴们可以继续看下去,是不是和你理解的一样?
基本与引用型别
何为基本、引用型别呢?我们看一下划分基本型别:
整型:byte,short,int,long
浮点型:float,double
字元型:char
布林型:boolean
引用型别:
阵列
类
界面
基本型别和引用型别的区别是什么呢?看下面的程式码
int a=1;
String str = "hello";
上图:变数a为基本型别,值就直接储存到变数中。而str是引用型别,变数str储存的是物件的内存地址。我们一般叫str为引用型别,引用实际是指向实际物件,实际物件中储存的内容
案例一
上图执行结果
=====基本型别-a=1
因为Java是按照值传递的原则,在执行incr方法时,其实是把a的值传递给了引数b,在incr方法中,对b变数进行操作,跟变数a没有关系,所以变数a值未变。
这体现了Java引数传递是按照值传递的。
案例二
学生实体类对学生年龄进行赋值
上图执行结果:
=====引用型别-学生:Student [name=张三, age=20]
studentA变数传送了改变,这是因为studentA变数储存的是引用地址,方法引数传递其实就是把这个引用地址的值传递方法引数stu,stu变数的值也是引用地址,对stu变数对Age进行赋值,直接影响实际的内存物件。从而间接影响了变数studentA,因为studentA也是引用地址,指向的同一个内存物件。
是不是感觉蛮简单的,很容易理解,那我们继续网下看。
案例三
上图的程式码执行,应该是什么呢?很多小伙伴在这里就被坑了。我们看一下执行结果
=====引用型别-学生:Student [name=张三, age=10]
很多小伙伴们会以为studentA应该为null,这个是很错误的,我们用图来说明,就清楚了
其实stu=null,就是把stu变数里面的引用地址的值,改为null而已,没有对实际内存物件产生改变的,之前的studentA变数里面的引用地址是没有变的。
我们继续再看一个特殊的变数型别。
案例四
上图执行应该是什么呢?这个小伙伴也会在这里困惑,我们看一下执行结果
=====引用型别-str=iphone
这个执行结果是不是很意外,String型别是引用型别,引数s是引用地址 和 str的引用地址是一样的啊,把变数s改变了,应该str变数也会改变啊,怎么没有改变?
这个就是String型别的特殊的地方,对String型别的原话是
their values cannot be changed after they are created
意思就是String型别的一旦被建立,不能修改他的值,可以理解为final型别。其实上面程式码的真实逻辑是对引数s进行赋值“华为”,不是把原来的“iphone”内存物件改变了,而是新建了一个内存物件“华为”,然后把这个新的内存物件地址赋值给变数s。而变数stu里面的引用地址是没有变的,还是指向的是“iphone”的内存地址。如图
总结
小伙伴们看到这里,有没有感觉有点收获。有时候很简单的问题,其实也没那么简单,很考基本功的,嘿嘿,谢谢!!!-End-
如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!
10几年的经验实战分享
相关微服务,分散式,高并发,高可用,企业实战,干货等原创文章正在路上
欢迎关注头条号:老顾聊技术
精品原创技术分享,知识的组装工
推荐阅读
1、你了解如何利用token方式实现分散式Session吗?
2、Mysql索引结构演变,为什么最终会是那个结构呢?让你一看就懂
3、一场比赛涉及到的知识,用通俗易通的方式介绍并发协调
4、企业实战Redis全方面思考,你思考了吗?
5、面试题:Thread的start和run的区别
6、面试题:什么是CAS?CAS的作用以及缺点
7、如何访问redis中的海量资料?避免事故产生
8、如何解决Redis热点问题?以及如何发现热点?
9、如何设计API界面,实现统一格式返回?
10、你真的知道在生产环境下如何部署tomcat吗?
11、分享一线互联网大厂分散式唯一ID设计 之 snowflake方案
12、分享大厂分散式唯一ID设计方案,快来围观
13、你想了解一线大厂的分散式唯一ID生成方案吗?
14、你知道如何处理大资料量吗?(资料拆分篇)
15、如何永不迁移资料和避免热点? 根据服务器指标分配资料量(揭秘篇)
16、你知道怎么分库分表吗?如何做到永不迁移资料和避免热点吗?
17、你了解大型网站的页面静态化吗?
18、你知道如何更新快取吗?如何保证快取和数据库双写一致性?
19、你知道怎么解决DB读写分离,导致资料不一致问题吗?
20、DB读写分离情况下,如何解决快取和数据库不一致性问题?
21、你真的知道怎么使用快取吗?
22、如何利用锁,防止快取击穿?重构思想的重要性
23、海量订单产生的业务高峰期,如何避免讯息的重复消费?
24、你知道如何保障生产端100%讯息投递成功吗?
25、微服务下的分散式session该如何管理?