比较 EQUALS() 和 ==
来源:互联网 发布:分期购物商城源码 编辑:程序博客网 时间:2024/05/18 13:26
1.比较方式角度:
== 是面向过程的操作符;equals是面向对象的操作符
== 不属于任何类,equals则是任何类(在Java中)的一个方法;
我们可以 1)Primitive1 (基本类型) == Primitive2(基本类型);
2)Object Reference1(对象引用) == Object Reference2(对象引用)
3)Object Reference1 (对象引用) .equals(Object Reference2 (对象引用))
这三种比较,但却不能Primitive1 (基本类型).equals( Primitive2(基本类型));
对于基本类型,没有面向对象中发送消息一说,自然也不会有方法成员。
2.比较目的角度:
1)如果要比较两个基本类型是否相等,请用 ==;
2)如果要比较两个对象引用是否相等,请用 ==;
3)如果要比较两个对象(逻辑上)是否一致,请用equals;
3.对两个对象(逻辑上)是否一致的阐释:
有人会问:在C++中, 比较两个对象相等不是也可以用 == 吗?我知道您是指运算符重载,但是很遗憾,Java中不支持运算符重载(java中亦有重载过运算符,他们是“+”,“+=”,不过也仅此两个,而且是内置实现的);所以,对象的是否相等的比较这份责任就交由 equals()来实现 。
这个“逻辑上”其实就取决于人类的看法,实际开发中,就取决于用户的需求;
有人会有看法:“取决于人类的看法”太过宽泛和不严肃,如果某人要两件风牛马不相及的事物也相等,equals是否也能作出这样的比较呢?我们说可以的下面这个例子说明了这一点:
class Horse
{
String Type;
int Legs;
//相等的标准:腿的数目相等
public boolean equals(Object o)
{
if(this.Legs==((Cattle)o).Legs){
return true;
}
return false;
}
public Horse(String Type,int legs)
{
this.Type=Type;
this.Legs=legs;
}
4.equals() 与 ==:
比較物件內容 比較是否同一物件
equals() ==
===================================
String str1 = new String(“abc”);
String str2 = new String(“abc”);
String str3 = str1;
String str4 = “abc”;
String str5 = “abc”;
=======================================================
str1 / str2 str1 / str3 str4 / str5 str1 / str4
Equals true true true true
== false true true false
=======================================================
String str = "abc" 跟 String str = new String("abc")再做”==”得到的結果不同。
long i = 1;
double j = 1;
// i == j 為true。(因為primitive data type,值相等即為true)
Long a = new Long(3L);
Long b = new Long(3L);
Double x = new Double(3.0);
//a == b為false(因為reference type,非同一個物件了)。
//a == x為compile err(因a與x無繼承關係無法convertible)
==的左右兩邊若為不相容的型別轉換,則會發生compiler errors,但若是equals,當物件不相同時 equal()會回傳false,不會造成編譯錯誤(equals Float object and Double object will always return false)。
compares(equals) a Float object and a Double object which will always return false。
每個java class都有一個”equals()”method,這個method是使用”==”來比較兩個reference var所存的值(即是否指向一物件)若要比較content是否相同,必須override equals() method,同時也必須override定義於Object class的”hashcode()”method,否則java collection API操作這個class的object時會錯。
String、Date、File及8個wrapper classes都已override equals() method。
如果hashCode值相同,那object”可能”相同(equal);如果hashCode值不相同,那object”一定”不相同。
- 比较 EQUALS() 和 ==
- 比较“==”和equals
- equals和==比较
- Equals和==比较
- ==和equals比较
- ==和equals()比较
- ==和equals的比较
- equals 和 ==的比较
- 比较两个变量 ==和equals
- java ==和equals比较
- java 中的==和equals比较
- equals和==的比较
- ==和equals比较运算符
- 比较“==”和equals()区别
- java equals和==比较
- equals()方法和==的比较
- ==和equals比较运算符
- Java 的==和equals比较
- 局部变量,全局变量?探寻程序上面的栈(STACK)空间的最大值
- 技术型管理的领导潜力测评,全国第一个同类测评
- 字符编码(一):ASCII码,扩展ASCII码
- table画斜线
- Java 并发编程(1)-概念
- 比较 EQUALS() 和 ==
- eval命令的使用
- 交叉编译和C++ test交叉平台测试
- 近朱者赤近墨者黑
- 简单但有用的SQL脚本
- 建站DIV+CSS 之网页切图过程中div+css命名规则
- linux内核IOCTL网络控制框架实现分析
- Java并发编程(2)-线程
- vim配置文件