首页 >Java >java教程 >何时以及为何在 Java 中使用'new String(...)”?

何时以及为何在 Java 中使用'new String(...)”?

Patricia Arquette
Patricia Arquette原创
2024-12-24 03:35:14202浏览

When and Why Would You Use `new String(...)` in Java?

Java 中对字符串对象的字符串常量赋值:理解“new String(...)”

在检查代码示例时,您可以遇到过使用“new”运算符将 String 常量分配给 String 对象的情况。这种语法引发了关于其目的和效果的问题,特别是考虑到常量池中字符串常量的典型存储。

“new String(...)”的目的

“new String(...)”的主要目的是创建一个新的 String 对象,其中包含指定 String 文字的副本。与“s = “Hello World”;”引用常量池中存储的现有字符串文字不同,“s = new String(“Hello World”);”使用自己的字符数组后备存储在堆中创建一个新对象。

堆上的分配

是的,在“new String(... )”,在堆上分配一个新对象来存储 String 的值。这与引用常量池中现有的字符串文字相反。

用例和实现依赖

在某些情况下,您可能希望强制使用不同的副本使用“new String(...)”的内部字符数组。例如:

small = new String(huge.substring(10, 20))

但是,此行为未记录且依赖于实现。不同的 Java 虚拟机 (JVM) 可能会以不同的方式处理此表达式。

陷阱和限制

Apache Harmony 中 String(String) 的早期实现实际上并没有创建一个底层字符数组的副本。这可能会导致潜在的内存问题,例如即使不再需要也保留对大型字符数组的引用。

要使用单独的字符副本创建新的 String 对象,有必要使用:

small = new String(huge.substring(10, 20).toCharArray());

这种方法确保了字符的不同副本,但需要两个数组副本,可以是

结论

“new String(...)”表达式在堆中创建一个新的 String 对象,其中包含指定 String 文字的副本。虽然它在某些情况下很有用,但重要的是要了解其潜在的陷阱和实现依赖性,以避免意外行为。

以上是何时以及为何在 Java 中使用'new String(...)”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn