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

String str = “i”; 从常量池获取或创建对象,而 String str = new String(“i”); 总在中新建对象;2. 前者高效节省内存,后者可能重复创建浪费资源;3. 前者相同值引用相等,后者不相等;4. 推荐优先使用字面量方式创建字符串

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

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

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

壁纸样机神器

免费壁纸样机生成

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

查看详情 String str=”i”与 String str=new String(“i”)一样吗?

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 优化。 基本上就这些,不复杂但容易忽略。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇
text=ZqhQzanResources