我是JAVA编程新手。
我在我的书上读过
String a="Hello";
String b="Hello";
System.out.println(a==b);
这应该返回false因为 a 和 b 引用 String 对象的不同实例。
因为赋值运算符比较对象的实例,但我仍然得到true.
我正在使用 Eclipse IDE。
书中的例子是这样的:
String s = "s";
String sToo = "s";
System.out.println(a == b);
System.out.println(s == sToo);
对于 s == sToo,这段代码会打印“false”。那是因为 s 和 sToo 是
对 String 对象的不同实例的引用。因此,即使它们具有相同的值,
在相等运算符眼中不相等。另外, s == “s” 打印 false,因为字符串文字
生成 String 类的另一个实例。
书名:JAVA 7 绝对初学者
这是一个称为优化字符串池 http://www.dreamincode.net/forums/topic/187631-the-string-pool/其中编译时常量字符串(又称为相同的在编译时) 可以设置为使它们实际上是内存中的同一对象(为最常用的对象类型之一节省空间)。或者用docs http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern%28%29;
“所有文字字符串和字符串值常量表达式都是
实习过。”
请注意,这仅适用于在编译时定义的字符串,因此以下内容确实会打印 false。
String a="Hello";
String b=new String("Hello");
System.out.println(a==b); //prints false because a new string was forced
or
String a="Hello";
String b1="He";
String b2="llo";
String b=b1+b2;
System.out.println(a==b); //prints false because b wasn't know to be "Hello" at compile time so could not use string pooling
注意:通过将 b1 和 b2 设置为最终值,可以使第二个片段打印 true,从而允许在编译时知道 b1+b2。总而言之,您需要非常小心并且相当尊重地对待 string==string,在绝大多数情况下,您需要 string.equals(string) ,但这种行为不存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)