栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java--对象的比较

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java--对象的比较

  • 对象的比较
  1. 比较身份:==
  2. 比较值:equals(需要手动重写才能按值比较)
  3. 比较类型:instanceof 

equals如果没有重写,默认执行的是object中的equals,比较规则也是在比较身份 

  • 使用comparable接口时,最好指定泛型参数,编译器自动完成类型校验工作。不写参数的话默认为object,则需要手动类型转换。
  1. 使用comparable,必须让要比较的类实现comparable接口,需要修改代码。
  2. 使用比较器comparator,不需要修改代码,重新创建一个类,实现comparator接口。 
  • 为什么有了comparable,还要有comparator? 
  1. comparable使用时必须要修改带比较类的代码,实际开发中,不是所有类都可以修改原码。
  2. comparable只能定义一种比较规则, comparator可以定义多种。
class Card implements Comparable{
    public String rank;
    public String suit;

    public Card(String rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }

    @Override
    public int compareTo(Card o) {
        if (o == null) {
            //一般认为null值最小
            return 1;
        }
        //点数取值
        int rank1 = this.getValue();
        int rank2 = o.getValue();
        return rank1 - rank2;
    }

    public int getValue() {
        //把string类型的rank转换成数字点数
        int value = 0;
        if ("J".equals(rank)) {
            value = 11;
        }
       else if ("Q".equals(rank)) {
            value = 12;
        }
       else if ("K".equals(rank)) {
            value = 13;
        }
        else if ("A".equals(rank)) {
            value = 1;
        }else{
            //字符串转为整数
            value = Integer.parseInt(rank);
        }
        return value;
    }


    @Override
    public boolean equals(Object obj) {
        //按照值来比较this和obj
        //1.自己和自己比较的情况,== 比较身份
        if (this == obj) {
          return true;
        }
        //2.obj为null结果为false
        if (obj == null) {
            return false;
        }
        //3.obj这个类型是不是当前card类型
        if (!(obj instanceof Card)){
            return false;
        }
        //4.真正的比较内容
        Card other = (Card)obj;
        return this.rank.equals(other.rank) && this.suit.equals(other.suit);
    }
}

class CardComparator implements Comparator {
    @Override
    public int compare(Card o1, Card o2) {
        if (o1 == o2) {
            return 0;
        }
        if (o1 == null) {
            return -1;
        }
        if (o2 == null) {
            return 1;
        }
        int value1 = o1.getValue();
        int value2 = o2.getValue();
        return value1 - value2;
    }
}
public class testCompare {
    public static void main(String[] args) {
        Card p = new Card("6","♦");
        Card q = new Card("K","♦");
        Card w = p;

       
       

        CardComparator comparator = new CardComparator();
        System.out.println(comparator.compare(p,q));
    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号