下面这两个陈述有什么区别?
String s = "text";
String s = new String("text");
new String("text");
显式创建一个新的且引用不同的实例String
目的;String s = "text";
可以重用来自的实例字符串常量池如果有的话。
You 非常稀有会想要使用new String(anotherString)
构造函数。从API:
String(String original) http://java.sun.com/javase/6/docs/api/java/lang/String.html#String%28java.lang.String%29:初始化一个新创建的 String
对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本。除非需要原始的显式副本,否则不需要使用此构造函数,因为字符串是不可变的。
相关问题
- Java 字符串:“String s = new String(”silly“);” https://stackoverflow.com/questions/334518/java-strings-string-s-new-stringsilly
- 字符串是Java中的对象,那么为什么我们不使用“new”来创建它们呢? https://stackoverflow.com/questions/2009228/strings-are-objects-in-java-so-why-dont-we-use-new-to-create-them
参照区分是什么意思
检查以下代码片段:
String s1 = "foobar";
String s2 = "foobar";
System.out.println(s1 == s2); // true
s2 = new String("foobar");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
==
对两个引用类型进行引用同一性比较。两个对象是equals
不一定==
。通常使用是错误的==
关于引用类型;大多数时候equals
需要用它来代替。
尽管如此,如果出于某种原因您需要创建两个equals
但不是==
字符串,你can使用new String(anotherString)
构造函数。不过,需要再次强调的是,这是very奇特的,而且很少是意图。
参考
- JLS 15.21.3 引用相等运算符 == 和 != http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.21.3
- class Object - boolean Object(equals) http://java.sun.com/javase/6/docs/api/java/lang/Object.html#equals%28java.lang.Object%29
相关问题
- Java String.equals 与 == https://stackoverflow.com/questions/767372/java-string-equals-versus
- 如何在 Java 中比较字符串? https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)