内存参考
Memory reference
是c
指向a还是c
指向与[=13相同的内存 =] 指的是什么?
为什么下面的代码会打印“We are equal”?
提前致谢
public static void main(String args[]) {
String a = "10";
String b = "10";
String c = a;
if(c.equals(b)) {
System.out.println("We are equal ");
}
else {
System.out.println("Not equal! ");
}
}
Java 通过引用存储对象...引用恰好是我们使用原语时的值。
int
是原语所以
a == c
=> true
a == b
=> true
b == c
=> true
对于字符串,情况略有不同。 String
s 是有效的字符数组:char[]
但在 Java 中不被视为基本类型。所以:
"str1" == "str1"
=> false
因为您现在正在比较两个对象引用。
出于这个原因,Object
class 具有 equals()
方法,该方法允许您通过对象引用 ID 以外的其他方式比较引用对象(非基元)。 String
(Object.class 的子class)class 覆盖了 equals
方法。
在你的例子(上面)中你说:
So why is ab==abc
false
. They are both pointing to same address.
这是不正确的。 ab
指向的字符串是“meowdeal”,abc
指向的字符串也是“meowdeal”……但关键是它们是两个不同的实例。因此:
ab==abc
=> false
- 这里检查引用是否相等 - 它们是否是相同的对象引用(不,它们不是)
ab.equals(abc)
=> true
- 此处您要检查字符串是否相等(ab
的 "meowdeal"
是否与 abc
的相同"meowdeal"
- 是的。
这是您可能会不时遇到的曲线球面试问题之一,因此值得注意。
是c
指向a还是c
指向与[=13相同的内存 =] 指的是什么?
为什么下面的代码会打印“We are equal”?
提前致谢
public static void main(String args[]) {
String a = "10";
String b = "10";
String c = a;
if(c.equals(b)) {
System.out.println("We are equal ");
}
else {
System.out.println("Not equal! ");
}
}
Java 通过引用存储对象...引用恰好是我们使用原语时的值。
int
是原语所以
a == c
=> true
a == b
=> true
b == c
=> true
对于字符串,情况略有不同。 String
s 是有效的字符数组:char[]
但在 Java 中不被视为基本类型。所以:
"str1" == "str1"
=> false
因为您现在正在比较两个对象引用。
出于这个原因,Object
class 具有 equals()
方法,该方法允许您通过对象引用 ID 以外的其他方式比较引用对象(非基元)。 String
(Object.class 的子class)class 覆盖了 equals
方法。
在你的例子(上面)中你说:
So why is
ab==abc
false
. They are both pointing to same address.
这是不正确的。 ab
指向的字符串是“meowdeal”,abc
指向的字符串也是“meowdeal”……但关键是它们是两个不同的实例。因此:
ab==abc
=> false
- 这里检查引用是否相等 - 它们是否是相同的对象引用(不,它们不是)
ab.equals(abc)
=> true
- 此处您要检查字符串是否相等(ab
的 "meowdeal"
是否与 abc
的相同"meowdeal"
- 是的。
这是您可能会不时遇到的曲线球面试问题之一,因此值得注意。