当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 基本类型
  • 引用类型
    • date类型比较
    • LocalDate类型比较
    • LocalDateTime类型比较
    • Bigdecimal类型比较
    • 对象类型比较

前言

在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@Overridepublic 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);}@Overridepublic 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@Overridepublic 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);}@Overridepublic int hashCode() {return Objects.hash(page, name);}//按页数排序@Overridepublic 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> {@Overridepublic int compare(Book o1, Book o2) {return o1.name.compareTo(o2.name);}}//定义页码比较器class PageCom implements Comparator<Book>{@Overridepublic 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}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C# 各版本语法新功能汇总
  • python初学之路
  • 1.33、激活可视化卷积神经网络(matalb)
  • Android init常用调试工具
  • ubuntu 20.04 系统 同一宿主机,不同ros2 docker 不通信问题
  • EPLAN 去掉PDF中的红色跳转标识
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(六)-人工智能控制的自主无人机用例
  • C++代码_让室友坑我
  • 搞定前端面试题——ES6同步与异步机制、async/await的使用以及Promise的使用!!!
  • 网络故障处理及分析工具:Wireshark和Tcpdump集成
  • golang单元测试性能测试常见用法
  • 【Linux 配置静态IP】Ubuntu20.04
  • MySQL双主双从实现方式
  • 音视频开发入门教程(2)配置FFmpeg编译 ~共210节
  • Scala学习笔记16: 注解
  • 《深入 React 技术栈》
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • golang 发送GET和POST示例
  • happypack两次报错的问题
  • JavaScript实现分页效果
  • JS+CSS实现数字滚动
  • mac修复ab及siege安装
  • Phpstorm怎样批量删除空行?
  • Redash本地开发环境搭建
  • STAR法则
  • tensorflow学习笔记3——MNIST应用篇
  • 浏览器缓存机制分析
  • 爬虫模拟登陆 SegmentFault
  • 日剧·日综资源集合(建议收藏)
  • 赢得Docker挑战最佳实践
  • 用Visual Studio开发以太坊智能合约
  • UI设计初学者应该如何入门?
  • # 透过事物看本质的能力怎么培养?
  • #单片机(TB6600驱动42步进电机)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • ${factoryList }后面有空格不影响
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (二十四)Flask之flask-session组件
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (十八)三元表达式和列表解析
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)Mysql的优化设置
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 4.0中的泛型协变和反变
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET4.0并行计算技术基础(1)
  • .Net程序帮助文档制作
  • .php文件都打不开,打不开php文件怎么办