Java中的equals(),==,compareTo()和compare()
- 首先只有==可以用作两个基本类型数据之间的比较,当然是值比较。当用作两个对象比较时,比较的是对象引用,而不是值比较。
- 其次任何对象都可以调用.equals()方法,因为这是从Object类继承下来的。Object.equals(Object obj)的缺省实现也是比较对象引用(显然它不知道如何比较值),但Java类库中的绝大多数类都已覆盖了equals()方法,实现了值比较。当然如果你自定义一个类而且没有覆盖equals()方法,当然比较的还是对象引用。
- 然后compareTo()方法是Comparable接口唯一需要实现的方法。它的返回值不同于equals(),返回的是int值-1、0和1,而不是true和false。如果你的自定义类有自然顺序,那么最好也implements这个Comparable接口并实现compartTo()方法。事实上,Java类库中许多类都实现了这个接口,比如:String、Integer、Date、Time等等。
- 最后compare()是Comparator接口的一个方法。最为常见的用法是自定义一个类实现Comparator接口,然后在调用Collection.sort()时作为参数传递。这样可以在compare()方法的实现中指定集合元素的排序规则。
equals与compareTo的分别:
equals返回true or false。
CompareTo的用法如下:
如果 String str1 = "ddd1 ";
String str2 = "ddd ";
那么,str1.compareTo(str2) 返回的是 1,即str1和str2 的长度差。
如果 String str1 = "ddD ";
String str2 = "ddd ";
那么,str1.compareTo(str2) 返回的是 -32,即str1和str2中 第一个不相等的字符 ‘D’ 和 ‘d’ 的ASCII码的差值。
更详细的,可以去看javadoc
equals 是比较两个值的大小 而且在不重写的情况下 是比较两个值内容是否相等 ==是判断地址是否相等(好像是这样)
而compare to一般用来 比较引用的对象的值 而且可以被重写 Java compareTo作用是对一个类中的属性以一定的方式进行组织,写好了可以让数据更有序./** * 实现Comparable接口,重写compareTo方法,返回值1,0,-1 * 覆写compareTo方法就是重建排序规则 */ public int compareTo(Object obj) { Person p = (Person) obj; if (p.score > this.score) { return 1; } else if (p.score < this.score) { return -1; } else { // 如果成绩相等则判断年龄 if (p.age > this.age) { return 1; } else if (p.age < this.age) { return -1; } else { return 0; } } }
附其他资料1
附其他资料
java 中对象比较大小
java 中对象比较大小有两种方法
1:实现Comparable 接口 的 public int compareTo(T o) 方法;
2:实现Comparator 接口 的 int compare(T o1, T o2)方法;
代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
List list =new ArrayList();
list.add(new Dept("2","研发部",23));
list.add(new Dept("2","总公司",575));
list.add(new Dept("2","总公司",565));
// Collections.sort(list);
Collections.sort(list, new Comparator(){
public int compare(Object arg0, Object arg1) {
// TODO Auto-generated method stub
Dept dept1=(Dept)arg0;
Dept dept2=(Dept)arg1;
return dept1.compareTo(dept2);
}
});
for (int i=0;i<list.size();i++){
System.out.println((Dept)list.get(i));
}
Dept dept1=new Dept("2","研发部",23);
Dept dept2=new Dept("2","kk",44);
Set set=new TreeSet(new Comparator(){
public int compare(Object arg0, Object arg1) {
// TODO Auto-generated method stub
return 0;
}
});
set.add(dept1);
set.add(dept2);
}
}
class Dept implements Comparable{
private String id;
private String name;
private long num;
public Dept(String id,String name,long num){
this.id=id;
this.name=name;
this.num=num;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getNum() {
return num;
}
public void setNum(long num) {
this.num = num;
}
public int compareTo(Object arg0) {
Dept dept=(Dept) arg0;
int i=0;
i=this.id.compareTo(dept.id);
if(i!=0){//部门id不相等
return i;
}else{//部门id相等
i=this.name.compareTo(dept.name);
if(i!=0){//部门名称不相等
return i;
}else{//部门名称不相等
if(this.num>dept.num)return 1;
else if(this.num<dept.num)return -1;
else return 0;
}
}
}
public String toString() {
// TODO Auto-generated method stub
return this.id+"-->"+this.name+"-->"+this.num;
}
}