1、
==是运算符,其它都是方法
if ( a.equals( b ) ) { ... };
3、 == 运算符:当操作数是基本数据类型时,比较两者的值;当操作数是封装类型时,比较的是对象的引用地址,
4、 equals是Object类中的方法,自定义类自动继承Object类,无需显式写出。
Object中equals方法的实现是直接用==运算符比较,即比较两者的地址。
public boolean equals(Object obj) {
return this == obj;
}
一般实际需求都是比较内容,而不是地址,所以当需要比较时,我们都会重写equals方法,在equals方法中可能又要用到hashCode方法。
八大基本数据类型的封装类型均重写了equals方法:
public boolean equals(Object obj ) { // 以Integer 封装类型为例
if ( obj instanceof Integer ){ // 用 instanceof判断是否是同一数据类型,否则不相等
return this.value==((Integer) obj ).intValue(); // 拆封,直接比较基本类型数据的值
}
return false;
}
集合工具类 Collections类中的sort方法是用于对集合进行排序。Collections类中名称为sort的方法有两个,其中一个调用的是comparaTo方法,一个调用的是compare方法。
compareTo方法是接口Comparable中的方法,自定义类实现了Comparable接口后,其类实例的集合就可以作为Collections.sort方法的参数,此方法会返回一个实例有序的集合。compate方法是接口Comparator中的方法,通常用在自定义类定义时没有实现Comparable接口,但是又有对类实例的集合进行排序的需求时。假如需要进行集合排序的类为A,则可以定义一个比较器AComparator类,实现Comparable接口,并将类A作为泛型参数。就可以调用Collections.sort方法,传两个参数,一个是类A的实例集合,一个是AComparator.class,sort方法会用调用AComparator中的compare方法对集合数据进行排序
- public static <T extends Comparable<? super T>> void sort(List<T> list) {
- Object[] a = list.toArray();
- Arrays.sort(a);
- ListIterator<T> i = list.listIterator();
- for (int j=0; j<a.length; j++) {
- i.next();
- i.set((T)a[j]);
- }
- }
- public static <T> void sort(List<T> list,Comparator<? super T> c) {
- Object[] a = list.toArray();
- Arrays.sort(a,(Comparator)c);
- ListIterator<T> i = list.listIterator();
- for (int j=0; j<a.length; j++) {
- i.next();
- i.set((T)a[j]);
- }
- }
comparaTo 和 compare 方法用于集合的排序,两个方法的返回值都是int型,结果有大于、小于、等于三种值,用于给数据排序,负数表示小于、0表示相等、正数表示大于。
若要对某集合实例进行排序,可以调用集合工具类 Collections类中的sort方法。
Collections类中名称为sort的方法有两个,其中一个sort方法调用的是comparaTo方法,一个sort方法调用的是