【问题标题】:Which is better String name1 = "some name" or String name1 = new String("some name")? [duplicate]String name1 = "some name" 或 String name1 = new String("some name") 哪个更好? [复制]
【发布时间】:2018-06-27 07:53:05
【问题描述】:

有什么区别

String name1 = "some name";

和

String name1 = new String("some name")

哪个更好用?

谢谢

【问题讨论】:

  • 最初,这感觉像是基于意见的。除了这里只有一种观点是有意义的。
  • 使用第一个。第二个将创建两个字符串(一个用于文字,然后另一个带有new String)。
  • 来自String(String)构造函数的JavaDoc:“除非需要原始的显式副本,否则不需要使用此构造函数,因为字符串是不可变的。”在非常非常罕见的情况下它很有用,您可能不会遇到它们。第一种形式更短、更快、更易读 - 除非你知道你想要另一种,否则只使用那个。
  • @Stultuske 因为这是合法的场景非常具体和罕见,如果 OP 出现在其中一个中,OP 会这么说......并且没有就此事提出任何问题OP 会知道这一切的。不知道什么是合法用途,就不可能合法地使用它。

标签: java


【解决方案1】:

一般使用String name1 = "some name"; 但是,如果您希望该字符串具有不同的引用,请使用新的初始化。

Java 对字符串有一些优化。 = "" initilizations 检查字符串池是否之前初始化了相同的值。

String s1 = "test";
String s2 = "test";
String s3 = new String("test");


s1 == s2 // this is true because of string pool
s1 == s3 // this is false because of s3 is new instance

在上面的例子中,s1 和 s2 放在字符串池 s3 中是在 java 字符串池之外。

使用 new String 会导致创建新实例并消耗更多内存。

查看更多关于字符串池的信息:https://www.journaldev.com/797/what-is-java-string-pool

【讨论】:

  • 严格来说,= "..." 不做任何检查。编译时出现的所有字符串文字都在当时预先分配,因此重复数据删除永远不会在运行时实际运行。
猜你喜欢
  • 2013-03-14
  • 2012-01-06
  • 2023-03-16
  • 2015-06-04
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 2021-06-23
  • 2017-04-30
相关资源
最近更新 更多