无聊小知识.04 以下代码会输出什么?

这篇具有很好参考价值的文章主要介绍了无聊小知识.04 以下代码会输出什么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言

今天同事给我看了一段代码,然后这段简单的代码,我却陷入了沉思。

2、代码

String string = "";
try {
    string = "123";
    return string;
} finally {
    string = "234";
}

这段代码,string最终是“123”还是“234”呢?按照以往认知:finally快是如论如何都要执行的,而return会等待finally执行结束后返回,这里string被修改为"234",那么return的值也就是"234"。

如果你也是这么想的,那么恭喜你,你也错了。

我们来看下chatGPT怎么说的:

无聊小知识.04 以下代码会输出什么?

 正如chatGPT所说的,确实如此。这里吐槽以下,文某某言返回的居然是“234”???

我们用IDEA执行下这段代码:

无聊小知识.04 以下代码会输出什么?

甚至我们可以看到,idea在finally里面的赋值给出了提示。 提示该string的赋值是不会被使用的。 

无聊小知识.04 以下代码会输出什么?而执行结果也正是123。

无聊小知识.04 以下代码会输出什么?

那么既然结果如此,那么真相是什么呢?

3、return和finally

其实finally始终都会执行是没错的!!! 我们先来看下该方法的字节码:

无聊小知识.04 以下代码会输出什么?

我们可以看到当执行到return时,此时string=123,jvm会将此时的变量地址存储到栈中,当finally执行了string=234后,只是改变了堆对象的值,而方法返回的该变量的地址。此时finally虽然改变了值,但是地址没有被改变,因此返回的还是原地址所执行的值。

4、改变一下

String string = "";
        try {
            string = "123";
            return string;
        } finally {
            string = "234";
            return string;
        }

 那如果是这段呢?finally中也加了return。我们再来看下字节码:

无聊小知识.04 以下代码会输出什么?

与上面不同的是,这里多了个areturn,也就是是这里的finally最终的返回会将该变量的地址推到栈顶位置,也就改变了原string=123的值,所以string就会输出234了。

 无聊小知识.04 以下代码会输出什么?

 5、小结

好了,又一个无聊又有趣的小知识。如果这个会出错的,大多还是对于jvm以及基础不够扎实的缘故。这里我也检讨一下。还是要学会看字节码的习惯,这里字节码是不会骗人的。文章来源地址https://www.toymoban.com/news/detail-414148.html

到了这里,关于无聊小知识.04 以下代码会输出什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python中pandas如何过滤输出【以下为ChatGPT编写】

    在 Python 中使用 Pandas 库进行数据分析时,你可以使用条件过滤来筛选和过滤输出。Pandas 提供了多种方法来实现数据的过滤和筛选操作,(ChatGPT编写)以下是一些常用的方式: 1. 使用布尔索引:    ```python    import pandas as pd        # 创建一个示例DataFrame    data = {\\\'Name\\\': [\\\'Ali

    2024年02月09日
    浏览(60)
  • 涨知识!芯片是怎么做出来的,今天终于看懂了

    从专业角度来说,一块芯片的制作工艺,制作流程极其复杂繁琐。但就从IC完整的产业链来说,主要分为IC设计→IC制造→封装→测试四个部分。 芯片制作过程: 一、芯片设计 芯片属于体积小,但高精密度极大的产品。想要制作芯片,设计是第一环节。设计需要借助EDA工具和

    2023年04月08日
    浏览(42)
  • 【开发工具】 什么是Office 今天让你认识它

    🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注 \\\"👍点赞\\\" \\\"✍️评论\\\" \\\"收藏❤️\\\" 大家的支持就是我坚持下去的动力! 如果以上内

    2024年02月08日
    浏览(43)
  • 今天我们来浅谈一下ChatGPT到底是什么东西

    这是一篇非学术专业性的文章,而我也是为了解chatGPT而学了两三天人工智能,所以哪里写的不好的不对的地方还希望海涵。 图灵测试 1950年,人工智能之父艾伦·图灵提出乐“图灵测试”。就是说当你在不面对面的时候跟机器人进行文字聊天的时候,如果你很难分辨出来对方

    2023年04月09日
    浏览(40)
  • 代码随想录| 图论04 查并集 ●查并集理论知识 ●1971.寻找图中是否存在路径 ●684.冗余连接 ●685.冗余连接II

    #查并集理论知识   并查集用处:解决连通性问题 将两个元素添加到一个集合中。 判断两个元素在不在同一个集合 思路:将三个元素A,B,C (分别是数字)放在同一个集合,其实就是将三个元素连通在一起,如何连通:只需要用一个一维数组来表示,即:father[A] = B,fathe

    2024年02月16日
    浏览(43)
  • 今天你做代码检查了吗?

    当下,各行各业都在寻找可以降本增效的效率途径,AI人工智能、机器学习等概念也被广泛应用至业务中;而广州云标局推出了一款智能ide代码工具——codigger,不仅项目体检能为开发项目提供快速代码检测,主要检测维度包括bug、漏洞、codesmell、代码行数等等,不管是自己了

    2024年02月15日
    浏览(39)
  • 毕业设计:Vue3+FastApi+Python+Neo4j实现主题知识图谱网页应用——前言

    资源链接:https://download.csdn.net/download/m0_46573428/87796553 前言:毕业设计:Vue3+FastApi+Python+Neo4j实现主题知识图谱网页应用——前言_人工智能技术小白修炼手册的博客-CSDN博客 首页与导航:毕业设计:Vue3+FastApi+Python+Neo4j实现主题知识图谱网页应用——前端:首页与导航栏_人工智

    2024年02月14日
    浏览(48)
  • 今天吃什么?我直接用Python制作随机食物生成器

    咳咳,今天中午吃什么啊,今天晚上吃啥,emm夜宵吃啥 不知道你们每天有没有问过这些问些问题,我基本上天天问,问完后想吃这个又想吃那个,纠结的要命,还不如搞个随机食物生成器 有些朋友就说了,这种东西网上一搜一大把,何必自己弄,但是网上搜的,随机出来的

    2024年02月12日
    浏览(47)
  • 今天给大家带来Python炫酷爱心代码

    前言: 这个是小编之前朋友一直要小编去做的,不过之前技术不够所以一直拖欠今天也完成之前的约定吧! 至于他是谁,我就不多说了直接上代码 如果有需要的话,可以联系小编噢!

    2024年02月05日
    浏览(49)
  • 掌握 GitHub Copilot:6个代码自动补全的必备技巧前言

    GitHub Copilot 是一款由人工智能驱动的编码助手,它能够根据上下文提供代码建议,极大地加快了开发过程。在之前介绍如何激活 Copilot 的文章之后,本文将深入探讨六个关键技巧,以高效利用 GitHub Copilot。 通过以下快捷键,可以更高效地使用 GitHub Copilot: **Tab:**接受建议。

    2024年04月16日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包