APP下载

面试题:JAVA方法引数传递方式?简约而不简单

消息来源:baojiabao.com 作者: 发布时间:2024-05-15

报价宝综合消息面试题:JAVA方法引数传递方式?简约而不简单

欢迎关注头条号:老顾聊技术

精品原创技术分享,知识的组装工

目录

前言基本与引用型别案例一案例二案例三案例四总结

前言

不同的程式设计,引数的传递分为按值传递和按引用传递。

按值传递表示方法接收是引数的值,而引用传递表示方法接收的是变数的地址

小伙伴们是不是觉得这个应该很简单啊,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变数储存的是引用地址,方法引数传递其实就是把这个引用地址的值传递方法引数stustu变数的值也是引用地址,对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该如何管理?

2019-07-18 10:54:00

相关文章