您的位置:首页 > 其它

关于==和equals的区别

2008-07-07 23:05 323 查看

背景:今天开始暑期软工实习课程。看到ppt上的这个知识点有点毛了。

有三段代码:

//: c03:Equivalence.java

public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
} ///:~


输出:false

true

//: c03:EqualsMethod.java

public class EqualsMethod {

public static void main(String[] args) {

Integer n1 = new Integer(47);

Integer n2 = new Integer(47);

System.out.println(n1.equals(n2));
}

} ///:~

输出:true

//: c03:EqualsMethod2.java

class Value {

int i;

}
public class EqualsMethod2 {

public static void main(String[] args) {

Value v1 = new Value();

Value v2 = new Value();

v1.i = v2.i = 100;

System.out.println(v1.equals(v2));

}
} ///:~


输出:false

起初着实不懂,找到网上类似的文章:http://www.cnblogs.com/oldjacky/articles/66604.htmlhttp://topic.csdn.net/u/20071208/17/91362954-7913-4ece-8c18-3b6971a50e4d.html

很不懂,对第一段程序,由结果推,n1、n2是引用类型(虽然不知道为什么,囧),而且不是同一引用,所以才会是fauls。对第二段程序,同样是引用类型,不清楚equals是看引用所对应的值是否相等还是引用是否相等。现在分两种情况:

一、如果是看引用本身的话,那么由2结果,两者是同一引用,与第一个程序矛盾;

二、如果是看引用所对应的值的话,确实为true,对第三个程序,那也应该为true啊,为什么结果是faulse呢?

极度矛盾和迷惑中。。。。。。。。。。。。。。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: