可能重复:
Java中的字符串比较和字符串实习
我理解String equals()方法是如何工作的,但我对String ==运算符的一些结果感到惊讶.
我希望==比较引用,就像它对其他对象一样.
但是,不同的String对象(具有相同的内容)==返回true,甚至对于静态字符串对象(具有相同的内容),这显然不是相同的内存地址.
我猜= =已被定义为与equals相同以防止其被滥用
Jon*_*eet 12
不,== 不只是比较引用.但是,我怀疑你被编译时常量被囚禁 - 所以两个文字最终会引用同一个字符串对象.例如:
String x = "xyz";
String y = "xyz";
System.out.println(x == y); // Guaranteed to print true
StringBuilder builder = new StringBuilder();
String z = builder.append("x").append("yz").toString();
System.out.printn(x == z); // Will print false
Run Code Online (Sandbox Code Playgroud)
字符串文字 - 或者更一般地说,作为常量表达式(第15.28节)的值的字符串 - 是"实例化"以便使用String.intern方法共享唯一实例.
它返回相同的原因是因为内存优化(并不总是保证会发生)具有相同内容的字符串将指向相同的内存区域以节省空间.在静态对象的情况下,它们总是指向同一个东西(因为static关键字只有一个).再次不要依赖上面的内容而是使用Equals()代替.
我应该从Jon Skeet中指出的一点是它始终保证编译时常量.但是再次使用equals(),因为它更清晰.
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |