news 2026/5/27 18:28:05

【面试题】Java中,String str=new String(“abc“);创建了几个对象?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【面试题】Java中,String str=new String(“abc“);创建了几个对象?

本文博主介绍一道经典的Java面试题,需要分两种情况讨论,关键点在于字符串常量池运行时堆的区别。

Java中,String str=new String("abc");创建了几个对象?

情况一:当常量池中不存在"abc"字符串对象时

会创建 2 个对象

  1. 第一个对象(在字符串常量池中)
    类加载时,"abc"这个字面量会被放入方法区的字符串常量池(JDK 7+ 后,常量池移到了堆中)。
  2. 第二个对象(在堆内存中)
    new String("abc")会在堆内存中创建一个新的String对象,它的内容指向常量池中的"abc"

所以,总共创建了:1个常量池对象 + 1个堆对象 = 2个对象


情况二:当常量池中已经存在"abc"字符串对象时

会创建 1 个对象

  1. 第0个对象(已在常量池中)
    之前已经通过其他方式(例如之前的代码执行过"abc"字面量或intern()方法)将"abc"放入了常量池,所以此时不会再创建常量池对象。
  2. 第一个对象(在堆内存中)
    new String("abc")仍然会在堆中创建一个新的String对象。

所以,总共创建了:0个常量池对象 + 1个堆对象 = 1个对象


代码示例说明

// 假设程序刚开始运行,常量池是空的Strings1="abc";// 第一次出现"abc",常量池创建1个对象,堆中不创建Strings2=newString("abc");// 常量池已存在"abc",不再创建;堆中创建1个新对象
  • 第一行:创建1个对象(常量池)。
  • 第二行:创建1个对象(堆)。
  • 两行总共创建2个对象(1个常量池 + 1个堆)。

核心总结

  • String str = new String("abc");中的"abc"字面量本身会触发常量池对象的创建(如果尚未存在)。
  • new关键字总是会在堆中创建一个新的String对象。
  • 所以,可能的创建对象数是1个或2个,取决于常量池的初始状态。
  • 这也是为什么推荐使用String s = "abc";而不是new String("abc"),避免不必要的堆对象创建。

最终答案(面试标准回答):

如果字符串常量池中之前没有"abc",则会创建2个对象(1个在常量池,1个在堆)。
如果常量池中已有"abc",则只会创建1个对象(堆中的新对象)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 20:27:11

从 0 到 1:基于 Spring Boot 3 + LangChain4j 构建企业级 AI 应用实战

从 0 到 1:基于 Spring Boot 3 + LangChain4j 构建企业级 AI 应用实战 定位说明:本文不是简单的 ChatGPT API 调用教程,而是一套可直接落地到企业生产环境的 Java AI 应用完整实践方案,涵盖架构设计、工程实现与生产级优化思路。 一、为什么选择这套技术栈 在企业环境中构…

作者头像 李华
网站建设 2026/5/22 18:02:48

基于SpringBoot的多功能音乐播放管理系统设计实现

背景与需求分析 随着数字音乐产业的快速发展,用户对音乐播放管理的需求日益多样化。传统音乐播放器功能单一,缺乏个性化推荐、多端同步、社交互动等现代功能。音乐平台需要高效的后台管理系统支撑曲库管理、用户行为分析、版权合规等业务需求。SpringBo…

作者头像 李华
网站建设 2026/5/27 9:01:07

面向攻击性安全专业人员的一体化浏览器扩展程序[特殊字符]

面向攻击性安全专业人员的一体化浏览器扩展程序 HackTools 是一款 Web 扩展程序,可帮助您进行Web 应用程序渗透测试,它包含速查表以及测试期间使用的所有工具,例如 XSS 有效载荷、反向 shell 等等。 有了这款扩展程序,您无需再在…

作者头像 李华
网站建设 2026/5/21 16:09:01

六轴机器人:运动学与动力学的奇妙探索及仿真之旅

六轴机器人六关节机器人六自由度机器人分析与仿真运动学动力学 aubo ur dobot 在机器人的世界里,六轴机器人,也被称为六关节机器人或六自由度机器人,可谓是明星般的存在。它们凭借高度的灵活性和精确的操作能力,在工业生产、科研…

作者头像 李华
网站建设 2026/5/22 3:26:54

去年在东莞电子厂调试的双头双Y螺丝机项目有点意思,特别是那个会左右横跳的下料机械手。今天拆解下它的核心玩法,给做自动化的小伙伴打个样

双头双Y自动锁螺丝机带压壳和下料机械手程序,采用显控触摸屏和台达PLC,用PLC做配方保存产品参数。 单独用可以做三轴带下料机械手螺丝机,连机用便是双头双Y待下架机械手自动锁螺丝。 下料机械手是横向的,即只用一个电机&#xff0…

作者头像 李华