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}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法 —— LRU算法

算法 —— LRU算法 LRULRU算法的工作原理&#xff1a;实现方法&#xff1a;性能考虑&#xff1a; 模拟过程splice函数对于std::list和std::forward_list基本语法&#xff1a;功能描述&#xff1a; 示例&#xff1a;注意事项&#xff1a; 如果大家已经学习过了Cache的替换算法和…

ElementUIV12相关使用方法

今日内容 零、 复习昨日 零、 复习昨日 一、Element UI Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库 官网&#xff1a; https://element.eleme.cn/#/zh-CN Element Plus,基于 Vue 3&#xff0c;面向设计师和开发者的组件库 官网: htt…

C语言--递归

曾经有一个段子&#xff1a;上大学时&#xff0c;我们的c语言老师说&#xff1a;学c时&#xff0c;如果有50%的同学死在了循环上面&#xff0c;那么就有90%的同学死在了递归上面。接下来&#xff0c;就来看看递归是怎么个事&#xff1f; 一.递归的介绍 递归是指一个函数直接或…

Spring中的@Transactional什么时候会失效?

在Spring中&#xff0c;Transactional注解用于声明式事务管理&#xff0c;它可以使方法在事务上下文中执行。然而&#xff0c;Transactional注解有时会失效&#xff0c;这通常是由于以下几种情况&#xff1a; 1. 非public方法&#xff1a; - Transactional注解默认只能应用…

跨平台WPF音乐商店应用程序

目录 一 简介 二 设计思路 三 源码 一 简介 支持在线检索音乐&#xff0c;支持实时浏览当前收藏的音乐及音乐数据的持久化。 二 设计思路 采用MVVM架构&#xff0c;前后端分离&#xff0c;子界面弹出始终位于主界面的中心。 三 源码 视窗引导启动源码&#xff1a; namesp…

MySQL(8)事务

目录 1.事务; 1.事务: 1.1 如果CURD不加限制会这么样子? 可能造成数据同时被修改, 数据修改的结果是未知的.(可以想一下之前的抢票线程问题) 1.2 事务概念: 事务就是一组DML语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;这一组DML语句要么全部成功&#xff0…

基于python旅游景点满意度分析设计与实现

1.1研究背景与意义 1.1.1研究背景 随着旅游业的快速发展&#xff0c;满意度分析成为评估旅游景点质量和提升游客体验的重要手段。海口市作为中国的旅游城市之一&#xff0c;其旅游景点吸引了大量游客。然而&#xff0c;如何科学评估和提升海口市旅游景点的满意度&#xff0c;…

中电金信-杭州工商银行|面试真题|2024年

中电金信-杭州工商银行 JAva集合用过哪些? ArrayList、LinkedList、HashSet、TreeSet、HashMap、LinkedHashMap、ConcurrentHashMap Arraylist和linkbist区别 ArrayList底层是数据&#xff0c;查询快&#xff0c;增删慢&#xff0c;线程不安全&#xff0c;效率高LikedList 底…

【概率论三】参数估计:点估计(矩估计、极大似然法)、区间估计

文章目录 一. 点估计1. 矩估计法2. 极大似然法2.1. 似然函数2.2. 极大似然估计法 3. 评价估计量的标准3.1. 无偏性3.2. 有效性3.3. 一致性 二. 区间估计1. 区间估计的概念2. 正态总体参数的区间估计 参数估计讲什么 由样本来确定未知参数参数估计分为点估计与区间估计 一. 点估…

算法:二叉树相关

目录 题目一&#xff1a;单值二叉树 题目二&#xff1a;二叉树的最大深度 题目三&#xff1a;相同的树 题目四&#xff1a;对称二叉树 题目五&#xff1a;另一棵树的子树 题目六&#xff1a;二叉树的前序遍历 题目七&#xff1a;二叉树遍历 题目八&#xff1a;根据二叉…

linux搭建mysql主从复制(一主一从)

目录 0、环境部署 1、主服务器配置 1.1 修改mysql配置文件 1.2 重启mysql 1.3 为从服务器授权 1.4 查看二进制日志坐标 2、从服务器配置 2.1 修改mysql配置文件 2.2 重启mysql 2.3 配置主从同步 2.4 开启主从复制 3、验证主从复制 3.1 主服务器上创建test…

微服务拆分流程 (黑马商城拆分商品服务)

1. 创建新module - maven模块&#xff0c;并引入依赖&#xff08;可以复制 把不需要的依赖删掉 &#xff09; 2. 新建包com.hmall.xx&#xff08;业务名&#xff09;&#xff0c;添加和修改启动类&#xff0c;新建mapper包、domain包 - service包 - controller包 3. 拷贝并修…

4款良心软件,免费又实用,内存满了都舍不得卸载

以下几款高质量软件&#xff0c;若是不曾体验&#xff0c;实在是遗憾可惜。 PDF Guru 这是一款开源免费的PDF编辑软件&#xff0c;打开之后功能一目了然。 可以拆分、合并PDF&#xff0c;也可以给PDF添加水印和密码&#xff0c;同时也可以去除别人PDF里的水印或密码&#xff0…

HouseCrafter:平面草稿至3D室内场景的革新之旅

在室内设计、房地产展示和影视布景设计等领域,将平面草稿图快速转换为立体的3D场景一直是一个迫切的需求。HouseCrafter,一个创新的AI室内设计方案,正致力于解决这一挑战。本文将探索HouseCrafter如何将这一过程自动化并提升至新的高度。 一、定位:AI室内设计的革新者 Ho…

Scala之OOP讲解

Scala OOP 前序 Scala 为纯粹OOP1、不支持基本类型&#xff1a;一切皆为对象 Byte,Int,...2、不支持静态关键字&#xff1a;static 3、支持类型推断【通过判断泛型的父子关系来确定泛型类的父子关系>协变&#xff0c;逆变&#xff0c;不变】和类型预定&#xff0c; 动静…

【iOS】类对象的结构分析

目录 对象的分类object_getClass和class方法isa流程和继承链分析isa流程实例验证类的继承链实例验证 类的结构cache_t结构bits分析实例验证属性properties方法methods协议protocolsro类方法 类结构流程图解 对象的分类 OC中的对象主要可以分为3种&#xff1a;实例对象&#xf…

【React】JSX基础

一、简介 JSX是JavaScript XML的缩写&#xff0c;它是一种在JavaScript代码中编写类似HTML模板的结构的方法。JSX是React框架中构建用户界面&#xff08;UI&#xff09;的核心方式之一。 1.什么是JSX JSX允许开发者使用类似HTML的声明式模板来构建组件。它结合了HTML的直观性…

TDesign组件库日常应用的一些注意事项

【前言】Element&#xff08;饿了么开源组件库&#xff09;在国内使用的普及率和覆盖率高于TDesign-vue&#xff08;腾讯开源组件库&#xff09;&#xff0c;这也导致日常开发遇到组件使用上的疑惑时&#xff0c;网上几乎搜索不到其文章解决方案&#xff0c;只能深挖官方文档或…

2024.7.17 ABAP面试题目总结

2024.7.17 用的SAP什么平台&#xff0c;S4/HANA吗&#xff0c;有用过ECC吗 S4/HANA&#xff0c;没用过ECC 会不会CDS VIEW 不会 会不会FIORI 不会 银企直连里面的逻辑了解不 不了解&#xff0c;做过&#xff0c;但是只能算很简单的修改 SAP做增强&#xff0c;如何创建…

网络安全-网络安全及其防护措施7

31.防病毒和恶意软件保护 防病毒和恶意软件防护的定义和作用 防病毒和恶意软件防护是一种保护计算机和网络免受病毒、木马、间谍软件等恶意软件侵害的安全措施。通过防护措施&#xff0c;可以检测、阻止和清除恶意软件&#xff0c;确保系统和数据的安全。其主要作用包括&…