两者有什么区别

String str = new String("abc");

and

String str = "abc";

当前回答

除了已经发布的答案,还可以查看这篇关于javaranche的优秀文章。

其他回答

字符串=新字符串(“FFFF”)创建2个对象:“FFFF”字符串和字符串对象,指向“FFFF”字符串,所以它就像指针指针(引用引用,我不热衷于术语)。

据说你永远不应该使用new String("FFFF")

根据String类文档,它们是等价的。

String(String original)的文档还说:除非需要original的显式副本,否则使用此构造函数是不必要的,因为String是不可变的。

寻找其他的回答,因为Java文档似乎是误导性的:(

在第一种情况下,创建了两个对象。

在第二种情况下,它只是一个。

尽管两种方式str都指向abc。

String字面值是Java语言的一个概念。这是一个String字面值:

"a String literal"

String对象是java.lang.String类的一个单独实例。

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

都是有效的,但有细微的区别。s1将引用一个被压缩的String对象。这意味着,字符序列“abcde”将存储在一个中心位置,无论何时再次使用相同的文字“abcde”,JVM都不会创建一个新的String对象,而是使用缓存的String的引用。

s2肯定是一个新的String对象,所以在这种情况下,我们有:

s1 == s2 // is false
s1 == s3 // is true
s1.equals(s2) // is true

除了已经发布的答案,还可以查看这篇关于javaranche的优秀文章。