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
}
原文地址:https://blog.csdn.net/qq_32590535/article/details/140486823
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!