Java 内存引用
是Java 内存引用,java,equals-operator,Java,Equals Operator,是c指向a还是c指向a指向的同一内存? 为什么下面的代码显示“我们是平等的” 提前谢谢 public static void main(String args[]) { String a = "10"; String b = "10"; String c = a; if(c.equals(b)) { System.out.println(&qu
c
指向a还是c
指向a
指向的同一内存?
为什么下面的代码显示“我们是平等的”
提前谢谢
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
,因为您现在正在比较两个对象引用
因此,对象
类具有equals()
方法,该方法允许您通过对象引用ID以外的其他对象来比较引用对象(非原语)。字符串
(Object.class的子类)类重写equals
方法
在你的例子(上面)中,你说:
那么为什么ab==abc
false
。他们都指向同一个地址
这是不正确的ab
指向“meowdeal”的字符串,abc
指向也是“meowdeal”的字符串。。。但至关重要的是,它们是两个截然不同的例子。因此:
ab==abc
=>false
-这里检查引用相等性-它们是相同的对象引用吗(不,它们不是)
ab.equals(abc)
=>true
-这里您正在检查字符串的相等性(是ab
的“meowdeal”
与abc
的的“meowdeal”
-是的
这是一个值得注意的曲线球面试问题。这段代码也有同样的问题,为什么ab不等于abc?String a=“meow”;String ab=a+“deal”;String abc=“meowdeal”;System.out.println(ab==abc);