new String("yupi") 一共创建了几个对象?

此答案节选自我们最近弄的 面试鸭小程序,更多 大厂常问面试题,可以点击下面的小程序进行阅读哈!

目前这个面试刷题小程序刚出,详细可以看这篇文章:这次,终于不用再被八股文吊打了!

回归面试题!

会创建 1 或 2 个字符串对象

主要有两种情况:

1、如果字符串常量池中不存在字符串对象“yupi”的引用,那么它会在堆上创建两个字符串对象,其中一个字符串对象的引用会被保存在字符串常量池中。

示例代码(JDK 1.8):

String s = new String("yupi");

对应的字节码:

ldc 命令用于判断字符串常量池中是否保存了对应的字符串对象的引用,如果保存了的话直接返回。

如果没有保存的话,会在堆中创建对应的字符串对象并将该字符串对象的引用保存到字符串常量池中。

2、如果字符串常量池中已存在字符串对象“yupi”的引用,则只会在堆中创建 1 个字符串对象“yupi”。

示例代码(JDK 1.8):

// 字符串常量池中已存在字符串对象“yupi”的引用
String s1 = "yupi";
// 下面这段代码只会在堆中创建 1 个字符串对象“yupi”
String s2 = new String("yupi");

对应的字节码:

这里的过程与上面差不多,我们可以看一下,7 这个位置的 ldc 命令不会在堆中创建新的字符串对象 “yupi”,这是因为 0 这个位置已经执行了一次 ldc 命令,已经在堆中创建过一次字符串对象 “yupi” 了。

7 这个位置执行 ldc 命令会直接返回字符串常量池中字符串对象“yupi”对应的引用。

最后

最后再推荐下鸭鸭目前努力在做 面试小程序神器,已经有 3000 多道面试题目啦,欢迎大家来阅读!如果大家有不会的面试题,也可以在小程序内反馈!鸭鸭会第一时间为大家解答!


除了小程序版本,我们 web 端也上线啦:www.mianshiya.com

我是鸭鸭,我们下期见~

相关推荐

  • 看了鱼友的上岸经历,治好了我的内耗!
  • 快手开源大模型长序列训练加速技术,性能大幅超越SOTA方案
  • Neural Networks (CCF-B) 特刊征稿:大语言模型时代的模型压缩
  • 多模态安全偏好对齐数据集SPA-VL,全方位提升多模态大模型安全能力
  • 小红书「REDstar顶尖人才计划」全球启动!
  • LLama+Mistral+…+Yi=? 免训练异构大模型集成学习框架DeePEn来了
  • 华为GTS LocMoE+:高可扩展性亲和度 MoE 架构,低开销实现主动路由
  • 小模型卷起来了:Mistral联合英伟达开源12B小模型,128k上下文
  • GPT-4o mini一手测评:懂得不多,但答得极快
  • 完蛋,我被数字同事包围了!小冰AI数字员工再升级,零样本定制,即时上岗
  • 如何用Paramiko和多线程让SSH远程命令飞一般执行?
  • 【Python】十大Python可视化工具,太强了
  • 【机器学习】机器学习分类模型决策边界,MLxtend轻松绘制!
  • 为什么现在很多人想读博了?读博有什么用?
  • 给你的 H5 页面加上惯性滚动吧!
  • 不用 JS,轻松锁定页面滚动!
  • RAG中的Query改写思路之查询-文档对齐评分优化:兼看昨日大模型进展总结回顾
  • 统计学入门:时间序列分析基础知识详解
  • 李飞飞创业:3 个月估值破 10 亿美元
  • CVPR 2024 录用数据出炉!这几个方向爆火 。。。