前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 中如何修改两个局部变量的值 ?

Java 中如何修改两个局部变量的值 ?

作者头像
周三不加班
发布2019-08-19 12:16:49
3.2K0
发布2019-08-19 12:16:49
举报
文章被收录于专栏:程序猿杂货铺程序猿杂货铺

今天的题目来源于小马哥的技术交流群里一位小伙伴的发问,他发出来这样一张图,问说是不是题目有问题,哪会我刚好有时间,瞅了一眼看着确实好像有问题。

题目

这道题目是看着是比较诡异的,因为正常情况下 Java 有两种传递方式,其一是值传递,其二是引用传递,所以本题需要我们修改 a 和 b 变量的值,可是 int 的值怎么能被改变呢 ?你如果说这两个变量是 Interger 的,哪无话可说,很容易就可以实现这个功能,但此处是 int 。

我的沙雕实现

是不是简单明了

然而理想是丰满的,可是现实却会很骨感,如上代码执行结果是:

瞧见没,啥都没变!

群友实现

群友们提供了一种思路就是把这个打印操作由 method 方法来代替,然后在打印结束之后直接终止程序执行,简单粗暴,但是能实现功能要求,具体代码可以参考如下实现:

利用 System.exit(0) 来终止虚拟机的运行,System.exit(status )这个方法,接收一个参数 status,0 表示正常退出,非零参数表示非正常退出,也就是说不管 status 为何值都会退出程序。和 return 相比,return 是回到上一层,而 System.exit(status) 是回到最上层。

使用这个方法,虽然可以实现功能,但是不科学,因为好端端的我们不能去人为中止虚拟机的执行,可是了想了半天,又没有啥好的想法。

小马哥实现

一小会功夫之后,小马哥出来给我们秀了一波,他的实现是这样的:

看到这段代码的时候群友们的心情是这样的

突然产生了一种要退群的欲望,我不配在这个群里,这代码也太骚气了吧 ... ...

对于小马哥这等大牛,我只能是膜拜了,此处也帮小马哥做个广告,小马哥在思否讲堂有个 一入Java深似海的收费讲座,感兴趣的可以去思否讲堂看看,保证让你怀疑人生,搞不好还会劝退,要是哪天一旦被劝退了,哪么我应该恭喜你脱离码农苦海,从此走上康庄大道,迎娶白富美!

具体讲座地址在 :http://t.cn/EGlIYaC

问题延伸

如果是 a 和 b 两个变量是 Integer 类型的话又该怎么做?

这个问题大家可以先思考一下,因为 Integer 是 int 的包装类,此处会好操作很多,我们可以直接使用反射获取到具体变量的 value 值,然后进行修改。

具体代码实现可以参考:

今天的题目到这里就结束了,你 get 到了吗?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员啊粥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 我的沙雕实现
  • 群友实现
  • 小马哥实现
  • 问题延伸
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档