SpringBoot日常:常用数据类型比较

前言

在Java中,我们一般分为基本类型的比较和引用类型的比较,下面按照这两个大分类梳理一下日常用到的类型比较

基本类型

基本数据类型比较主要都是采用运算符进行比较(> < >= <= != ==),最终得到布尔返回值,这里就不详细赘述

  • 整型: byte,short,int,long
  • 浮点型: float,double
  • 字符型: char
  • 布尔型: boolean

引用类型

引用类型主要就是对象的比较,这里先列举几个常用的工具类,最后再阐述一下自定义对象的比较

date类型比较

当比较两个date数据类型的大小,我们可以采用compareTo()方式进行比较两者大于、等于和小于

下面是一个比较日期是否为当天日期的示例代码:

public static void main(String[] args) {
        Date date1 = new Date();
        Date date2 = new Date(System.currentTimeMillis() + 5000); // 在当前日期的基础上加5秒

        int result = date1.compareTo(date2);

        if (result < 0) {
            System.out.println("date1 在 date2 之前");
        } else if (result == 0) {
            System.out.println("date1 和 date2 相同");
        } else {
            System.out.println("date1 在 date2 之后");
        }
    }

除了compareTo()方法之外,我们还可以使用其他方法进行日期比较,比如before()after()equal()
示例代码:

		if (date1.before(date2)) {
            System.out.println("date1 在 date2 之前");
        }

        if (date1.after(date2)) {
            System.out.println("date1 在 date2 之后");
        }

		if (date1.equal(date2)) {
            System.out.println("date1 等于 date2 ");
        }

LocalDate类型比较

LocalDate类型比较和Date类型比较的方式一样,可以用compareTo()方法,也可以使用before()after()equal()
示例代码:

public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2024, 1, 1);
        LocalDate date2 = LocalDate.of(2024, 12, 31);

		int result = date1.compareTo(date2);

        if (result < 0) {
            System.out.println("date1 在 date2 之前");
        } else if (result == 0) {
            System.out.println("date1 和 date2 相同");
        } else {
            System.out.println("date1 在 date2 之后");
        }

        // 使用 isBefore 方法
        if (date1.isBefore(date2)) {
            System.out.println("date1 在 date2 之前");
        }
        // 使用 isAfter 方法
        if (date1.isAfter(date2)) {
            System.out.println("date1 在 date2 之后");
        }
        // 使用 equals 方法
        if (date1.equals(date2)) {
            System.out.println("date1 等于 date2 ");
        }
    }

LocalDateTime类型比较

LocalDateTime类型和LocalDate比较的方式一样,可以直接参考上面LocalDate的比较方式,这里就不重复编写示例

Bigdecimal类型比较

在Java中,BigDecimal类有compareTo方法,可以用来比较两个BigDecimal对象的大小。
compareTo方法会返回一个整数值:

  • 如果BigDecimal相等,则返回0。
  • 如果BigDecimal调用者大于作为参数传入的BigDecimal,则返回1。
  • 如果BigDecimal调用者小于作为参数传入的BigDecimal,则返回-1。

示例代码:

public static void main(String[] args) {

        BigDecimal a = new BigDecimal("10");
        BigDecimal b = new BigDecimal("5");
        int result = a.compareTo(b);

        if (result > 0) {
            System.out.println("a > b");
        } else if (result < 0) {
            System.out.println("a < b");
        } else if (result == 0) {
            System.out.println("a == b");
        }
    }

对象类型比较

比较两个对象是否相同,通常是覆写equals()方法,如果相同返回true,不相同返回false。对于覆写的这个equals方法只能比较两个对象相不相同,不能比较对象的大小.

当我们不覆写equals()方法时,比较两个对象是达不到我们想要的效果.
示例代码:

//定义一个书本类
    class Book{
        public int page;
        public String name;

        public Book(int page,String name){
            this.page=page;
            this.name=name;
        }
    }
    public class TestBook {
        public static void main(String[] args) {
            Book page1=new Book(328,"西游记");
            Book page2=new Book(328,"西游记");
            System.out.println(page1.equals(page2));
        }
    }
	// 最终输出的结果是false

覆写equals()方法,再进行重新比较,就能输出我们想要的结果
示例代码:

//定义一个书本类
    class Book{
        public int page;
        public String name;

        public Book(int page,String name){
            this.page=page;
            this.name=name;
        }
		//复写equals
		@Override
    	public boolean equals(Object o) {
        	if (this == o) return true;
        	if (o == null || getClass() != o.getClass()) return false;
        	Book book = (Book) o;
        	return page == book.page && Objects.equals(name, book.name);
    	}

    	@Override
    	public int hashCode() {
        	return Objects.hash(page, name);
    	}
    }
    public class TestBook {
        public static void main(String[] args) {
            Book book1=new Book(328,"西游记");
            Book book2=new Book(328,"西游记");
            System.out.println(book1.equals(book2));
        }
    }
	// 最终输出的结果是true

除了类的相等比较,JDK还提供泛型的比较接口类comparable,在用户自己定义的类,如果想要按照自己的比较方式比较时,就可以在定义类时实现comparable接口,并且在类中重写compareTo方法。
示例代码:

	class Book implements Comparable<Book> {
        public int page;
        public String name;

        public Book(int page,String name){
            this.page=page;
            this.name=name;
        }
		//复写equals
		@Override
    	public boolean equals(Object o) {
        	if (this == o) return true;
        	if (o == null || getClass() != o.getClass()) return false;
        	Book book= (Book) o;
        	return page == book.page && Objects.equals(name, book.name);
    	}

    	@Override
    	public int hashCode() {
        	return Objects.hash(page, name);
    	}
    	//按页数排序
    	@Override
    	public int compareTo(Book o) {
        	return this.page-o.page;
    	}
    }
    public class TestBook {
        public static void main(String[] args) {
            Book book1=new Book(328,"西游记");
            Book book2=new Book(503,"三国演义");
            System.out.println(book1.compareTo(book2));
        }
    }
	// 输出结果-175

若我们想要自定义实现不同属性的比较,comparable就无法实现,这是我们需要自己去实现Comparator接口 ,然后重写Comparator接口中的compare方法
示例代码:

	//定义一个书本类
    class Book{
        public int page;
        public String name;

        public Book(int page,String name){
            this.page=page;
            this.name=name;
        }
    }
    //定义书名比较器
    class NameCom implements Comparator<Book> {

        @Override
        public int compare(Book o1, Book o2) {
            return o1.name.compareTo(o2.name);
        }
    }
    //定义页码比较器
    class PageCom implements Comparator<Book>{

        @Override
        public int compare(Book o1, Book o2) {
            return o1.page-o2.page;
        }
    }
    public class TestBook {
        public static void main(String[] args) {
            Book book1=new Book(328,"西游记");
            Book book2=new Book(503,"三国演义");
            //定义比较器对象 ->姓名比较
            NameCom nameCom=new NameCom();
            //定义比较器对象 ->年龄比较
            PageCom pageCom=new PageCom();
            //使用比较器对象进行比较
            System.out.println(nameCom.compare(book1,book2));
            System.out.println(pageCom.compare(book1,book2));
        }
        //输出结果   15222  -175
    }
  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值