【问题标题】:Java syntax: When declaring a string, why put "new" in front of the string instead of just simply assigning it [duplicate]Java语法:声明字符串时,为什么要在字符串前面加上“new”而不是简单地分配它[重复]
【发布时间】:2017-03-15 00:52:08
【问题描述】:

Java 语法:声明字符串时,字符串前面的new 关键字的目的是什么,而不是简单地赋值。

例子:

String str = new String ("Welcome!");

String strTwo = "Welcome!";

有什么区别?

【问题讨论】:

  • 第一个示例创建一个新字符串。第二个使用字符串文字池。您几乎应该总是选择第二种方式。
  • 另外,通过使用 new,您实际上已经完成了两者,声明了一个文字并使用 new String() 根据该文字创建了一个新字符串。
  • 请删除您的问题。

标签: java string variables


【解决方案1】:

new String ("Welcome!") 分配一个新字符串,它是给定字符串的副本。

这几乎没有用处,因为 Java 字符串是不可变的。

它产生影响的一种情况是新字符串不会是== 到给定的字符串。您应该首先将字符串与.equals() 进行比较。

请注意,Java 字符串文字被嵌入到所有字符串文字的表中。这样他们共享存储。它还使 == 对两个字符串文字起作用,但同样你应该只在非常特殊的情况下这样做。

大多数情况下,我认为来自 C++ 的程序员使用 new,因为需要将 C 字符串文字转换为 std::string 对象。

【讨论】:

  • 附带说明一下,String 实际上由一个 String 容器对象和一个包含字符的私有 char[] 组成。当您使用复制构造函数时,它将创建一个新的 String 对象,但在内部引用相同的 char 数组。这可以安全地完成,因为 String 是不可变的。
猜你喜欢
  • 2021-12-20
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多