che*_*hta 0 java object assignment-operator comparison-operators
我是JAVA编程的新手.我在书中看过
String a="Hello";
String b="Hello";
System.out.println(a==b);
Run Code Online (Sandbox Code Playgroud)
这应该返回false,因为a&b引用String对象的不同实例.
Bcoz赋值运算符比较对象的实例,但我仍然得到一个真实的.
我正在使用Eclipse IDE.
书中的例子如下:
String s = "s";
String sToo = "s";
System.out.println(a == b);
System.out.println(s == sToo);
Run Code Online (Sandbox Code Playgroud)
对于s == sToo,该位代码打印"false".那是因为s和sToo是对String对象的不同实例的引用.因此,即使它们具有相同的值,它们在相等运算符的眼中也是不相等的.此外,s =="s"打印为false,因为字符串文字产生String类的另一个实例.
书名:JAVA 7 for Absolute Beginners
这是一个称为字符串池的优化,其中可以设置编译时常量字符串(在编译时也称为相同),使得它们实际上是内存中的相同对象(为最常用的对象类型之一节省空间) .或者用文档的话说;
"所有文字字符串和字符串值常量表达式都是实例化的."
请注意,这仅适用于在编译时定义的字符串,因此以下内容真正打印为false.
String a="Hello";
String b=new String("Hello");
System.out.println(a==b); //prints false because a new string was forced
Run Code Online (Sandbox Code Playgroud)
要么
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
Run Code Online (Sandbox Code Playgroud)
注意:通过使b1和b2成为最终,可以使第二个片段打印为true,从而允许在编译时知道b1 + b2.总而言之,您需要非常小心并且非常尊重string == string,在绝大多数情况下,您需要string.equals(string),其中不存在此行为.
| 归档时间: |
|
| 查看次数: |
3092 次 |
| 最近记录: |