在java中,可以通过以下两种方式创建字符串
String foo="Test";
String fooobj=new String("Test");
到处都提到了这两种创建字符串的方法之间的区别。我想更多地了解什么是合适的场景,我们应该去哪里
String foo="Test";
什么时候去
String fooobj=new String("Test"); ?
永远不需要创建一个新的 String 对象
String fooobj = new String("Test");
所以,你永远不应该这样做。改写就String fooobj = "Test";
行了。
String 类是不可变的。这意味着 String 对象的内容在构造后无法更改。从来没有必要创建字符串文字的显式副本。
你永远不应该使用new String()
. 每当您以这种方式创建字符串时,都会在内存中创建新对象。如果您编写String s = "aaa"
,那么有可能已经在给定的 JVM 中创建了这样的对象,它存储在字符串池中,并且由于您的变量将只是引用该现有对象 - 您以这种方式保护内存。
当您使用第二种方法时,您实际上依赖第一种方法来初始化构造函数参数。
所以问题是如果您可以通过第一种方法创建 String 对象,为什么要花费额外的精力来使用第二种方法?
我看不到使用第二种构造函数样式的任何场景,因此始终坚持使用第一种方法。
字符串对象和字符串字面量之间存在细微差别。
字符串 s = "abc"; // 创建一个 String 对象和一个引用变量 在这个简单的例子中,“abc”将进入池中,s 将引用它。
字符串 s = new String("abc"); // 创建两个对象,一个引用变量 在这种情况下,因为我们使用了 new 关键字,Java 将在普通(非池)内存中创建一个新的 String 对象,s 将引用它。此外,文字“abc”将被放入池中。
字符串是常量;它们的值在创建后无法更改。字符串缓冲区支持可变字符串。因为 String 对象是不可变的,所以它们可以被共享。例如:
String str = "abc";
相当于:
String str = new String("abc");
由于其他答案中解释的原因,您应该避免使用第二种方式来声明字符串