首页 > Java > Java面试题 > 正文

String str="i"与 String str=new String(“i”)一样吗?

月夜之吻
发布: 2025-11-02 04:37:24
原创
807人浏览过
String str = "i"; 从常量池获取或创建对象,而 String str = new String("i"); 总在堆中新建对象;2. 前者高效节省内存,后者可能重复创建浪费资源;3. 前者相同值引用相等,后者不相等;4. 推荐优先使用字面量方式创建字符串。

string str=\

String str = "i";String str = new String("i"); 不一样,主要区别在于对象的创建方式和内存分配。

壁纸样机神器
壁纸样机神器

免费壁纸样机生成

壁纸样机神器 0
查看详情 壁纸样机神器

1. 字符串常量池 vs 堆内存

当使用 String str = "i"; 时,JVM 会检查字符串常量池中是否已经存在内容为 "i" 的字符串。如果存在,就直接返回该引用;如果不存在,就在常量池中创建一个新对象,并让 str 指向它。这种方式不会在堆中额外创建对象。 而使用 String str = new String("i"); 时,无论常量池中有没有 "i",都会在堆中创建一个新的 String 对象。同时,如果常量池中没有 "i",还会在常量池中创建一份。

2. 内存占用与性能

new String("i") 的方式效率较低,因为它可能导致重复创建相同内容的对象,浪费内存。例如:
  • String a = "i"; —— 只涉及常量池
  • String b = new String("i"); —— 在堆中新建对象,可能也在常量池中创建
推荐优先使用 String str = "i";,更高效且符合 Java 的字符串优化机制。

3. 引用比较结果不同

由于创建方式不同,两者在 == 比较时表现不一样:
  • String a = "i";
  • String b = "i";
  • a == b; // true,指向常量池同一个对象
  • String c = new String("i");
  • String d = new String("i");
  • c == d; // false,堆中两个不同的对象

4. 使用建议

除非明确需要一个全新的、独立的字符串对象(比如防止后续修改影响),否则应使用 String str = "i";。这是标准写法,也利于 JVM 优化。 基本上就这些,不复杂但容易忽略。

以上就是String str="i"与 String str=new String(“i”)一样吗?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号