JavaSE基础:数值比较

                                   数值比较

目录

数值比较

等值判断

和 == 的区别

重写 equals 方法

数值比较

compareTo 方法

compare 方法


等值判断

Object 类实现了 equals 方法 ,用于比较两个数据元素是否相等。

浮点类型由于精度丢失问题,进行等值判断常出现错误。如果有需求推荐使用 BigDecimal类

int a = 20 - 10;
int b = 10;
System.out.println(a.equals(b));         // truedouble a = 20.0 - 10.0;
double b = 10.0;
System.out.println(a.equals(b));         // false

 

和 == 的区别

  1. 对于基本类型,两者等价:判断数据是否相等。

  2. 对于对象(如 String 类):

    • ==:比较两个元素内存地址是否相等,即是否是同一个元素。
    • equals 方法:比较两个元素内容是否一致。
System.out.println(s1 == s2);                 // 判断两个引用指向的内存地址是否相等  
System.out.println(s1.equals(s2));            // 判断两个引用指向的内存地址是否相等(s1 为空抛出空指针异常)
System.out.println(Objects.equals(s1,s2));    // 判断两个引用指向的元素是否一致(推荐)

 

重写 equals 方法

对于用户自定义类,正常使用 equals 方法需要进行重写。重写 equals 方法必须重写 hashcode 方法:以保证相同对象拥有相同的哈希地址。这样才能正常地把该类对象放入 HashSet/HashMap 等集合框架中查找。

Object 类的 hashcode 方法是本地方法(底层用 c/c++ 实现),直接返回对象的内存地址。

public class User{int ID;String name;......@Overridepublic boolean equals(Object obj) {if(this == obj)  return true;if(obj == null) return false;if(obj instanceof User){User other = (User) obj;if(equals(this.ID, other.ID) && equals(this.name, other.name)){return true;}}return false;}@Overridepublic int hashCode() {int result = 17;result = 31 * result + (ID == null ? 0 : ID.hashCode());result = 31 * result + (name == null ? 0 : name.hashCode());return result;}
}

 

数值比较

Comparator 接口和 Comparable 接口都用于比较两个元素的大小:

  1. Comparable 接口位于 java.lang 包内,定义在要比较的实体类内部:包含 compareTo 方法。

  2. Comparator 接口位于 java.util 包内,实现在类的外部:包含 compare 方法和 equals 方法。

Comparator 接口的 equals 方法和 Object 类的 equals 方法不同, Object 类的 equals 方法实现在实体类的内部。

compare To方法

Java 自带数据类型均已实现 Comparable 接口并重写 compareTo 方法,默认情况下

  • 如果 s1 等于 s2,则返回 0;
  • 如果 s1 小于 s2,则返回小于 0 的值;
  • 如果 s1 大于 s2,则返回大于 0 的值。
Integer s1 = 100;
Integer s2 = 90;
System.out.println(s1.compareTo(s2));        

 

compare 方法

Arrays/Collections 类定义了 sort 方法对数组或者集合元素进行排列,数值的比较通过调用 Comparator 接口的 compare 方法实现。

执行 sort 方法时如果没有重写 compare 方法,默认调用的 compare 方法将会直接调用数据类型的 compareTo 方法,使数据从小到大排列。如果是自定义数据类型且未实现 compareTo 方法,则必须重写 compare 方法。

Arrays.sort(students);                      // 对数组排序
Collections.sort(students);                 // 对集合元素排序

开发者可以通过重写 compare 方法,实现自定义排列顺序。但要注意,如果数组中保存的是基础类型数据则无法自定义排序。

Arrays.sort(students, new Comparator<Student>() {          @Overridepublic int compare(Student s1, Student s2) {return s1.getID() - s2.getID();}            
});Collections.sort(students, (s1, s2) ->  s1.getID() - s2.getID());     // 使用 Lamdba 表达式简写

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

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

相关文章

【加密周报】中东“惊雷”炸响币圈!比特币减半成功完成,市场情绪已被提前消化!中美突传USDT重磅消息!

周五(4月19日)&#xff0c;比特币经历惊魂一刻&#xff0c;伊朗核设施所处的中部城市伊斯法罕惊传爆炸&#xff0c;叙利亚与伊拉克也都传来爆炸声响&#xff0c;中东全面战争与核武攻击威胁触发加密市场恐慌情绪。比特币一度下探59600美元。但随后伊朗强调核设施未受损&#xf…

组件安全(Solr、Shiro、Log4j、Jackson、FastJson、XStream)

Solr 主要基于HTTP和 Apache Lucene 实现的全文搜索服务器。 特征&#xff1a;图标识别 端口&#xff1a;8393 CVE-2019-0193&#xff08;远程命令执行漏洞&#xff09; 漏洞版本&#xff1a;Apache Solr < 8.2.0 利用条件&#xff1a; Apache Solr 的 DataImportHandler 启…

数据结构_带头双向循环链表

List.h 相较于之前的顺序表和单向链表&#xff0c;双向链表的逻辑结构稍微复杂一些&#xff0c;但是在实现各种接口的时候是很简单的。因为不用找尾&#xff0c;写起来会舒服一点。&#xff08;也可能是因为最近一直在写这个的原因&#xff09; #pragma once #include<std…

二维码门楼牌管理应用平台建设:构建智能社区治理新模式

文章目录 前言一、二维码门楼牌管理应用平台的意义二、走访日志功能的重要性三、走访日志功能的具体应用四、走访日志功能的优势五、结语 前言 在数字化浪潮下&#xff0c;社区管理正面临着前所未有的机遇与挑战。二维码门楼牌管理应用平台的建设&#xff0c;不仅为社区治理提…

代码随想录训练营Day 27|Python|Leetcode|122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获…

fastjson转换json时默认将属性第一个字母转小写

描述&#xff1a; 我新建了一个实体类&#xff0c;但是实体类的首字母是大写的&#xff0c;但是使用fastjson后打印的&#xff0c;Json字符串首字母却是小写的&#xff0c;这是fastjson的一个bug 实体类&#xff1a; Json字符串&#xff1a; 解决方法&#xff1a; 一、使…

HoloLens2的Unity应用在电脑上发布成安装包,然后通过wifi安装到设备

一、VS工程中的鼠标右键 二、发布——>创建应用程序包 三、选择【旁加载】 四、选择签名方法&#xff1a; 五、选择和配置包 六、创建完毕 七、网络连接设备 八、登录设备 九、安装app

六边形酷科技特效单页源码

源码介绍 基于canvas画布绘制多个六边形追踪鼠标&#xff0c;科技感的几何图形酷炫动画特效&#xff0c; 单页html源码&#xff0c;可以做网站动态背景&#xff0c;喜欢的朋友可以拿去 效果截图 完整源码 <!doctype html> <html> <head> <meta charset…

基于Kubernetes集群1.27.3构建ElasticSearch-7集群

基于Kubernetes集群构建ES集群 作者:行癫(盗版必究) 一:环境准备 1.Kubernetes集群环境 节点地址Kubernetes-Master10.9.12.206Kubernetes-Node-110.9.12.205Kubernetes-Node-210.9.12.204Kubernetes-Node-310.9.12.203DNS服务器10.9.12.210代理服务器10.9.12.209NFS存储1…

java之逻辑运算符

在java中&#xff0c;逻辑与的表示方法 && 逻辑或的表示方法 || 逻辑非为! 除了逻辑非是一元运算符之外&#xff0c;其他的都是二元运算符。 逻辑运算符的值必须是boolean型 假定两个变量&#xff0c;a和b&#xff0c;true用对表示&#xff0c;fals用错表示 a对&…

项目7-音乐播放器3(删除模块+播放音乐模块设计)

1.播放音乐模块设计 1.1 请求响应设计 请求&#xff1a; { get, /music/get?pathxxx.mp3 } 响应&#xff1a; { 音乐数据本身的字节信息 } 1.2 后端代码 1. Files.readAllBytes(String path) : 读取文件中的所有字节&#xff0c;读入内存 &#xff…

玄子Share-揭开5G神秘面纱

玄子Share-揭开5G神秘面纱 移动通信发展历程 在移动通信领域&#xff0c;常听到3G、4G的术语 G是Generation的简写&#xff0c;每一个G&#xff0c;都代表了移动通信的一个发展阶段&#xff0c;也是一个时代移动通信技术从 20 世纪 80 年代诞生开始&#xff0c;历经这 30 多…

SpringBoot集成FTP

1.加入核心依赖 <dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency> 完整依赖 <dependencies><dependency><groupId>org.springfra…

深度学习配置环境AllInOne

总结深度学校ubuntu环境配置 目录 0.前提工作0. nvidia驱动安装1.CudaTookits安装2. cuDNN安装3.conda安装3.0 conda基本概念3.1 系统python版本确认3.2 miniconda安装3.3 ~~conda迁移~~3.4 附4.pytorch安装5. git安装5.1 git命令行安装5.2 git-gui安装0.前提工作 安装顺序:n…

蛋白质亚细胞定位预测(生物信息学工具-017)

直奔主题&#xff0c;下面这张表图怎么制作&#xff0c;一般都是毕业论文hh&#xff0c;蛋白质的亚细胞定位如何预测&#xff1f; 01 方法 https://wolfpsort.hgc.jp/ #官网小程序&#xff0c;简单好用&#xff0c;不用R包&#xff0c;python包&#xff0c;linux程序&#x…

微服务使用SockJs+Stomp实现Websocket 前后端实例 | Vuex形式断开重连、跨域等等问题踩坑(一)

大家好&#xff0c;我是程序员大猩猩。 之前几篇文章&#xff0c;我们讲了Spring Cloud Gateway的轻量级实现&#xff0c;Nginx的配置概念与实现&#xff0c;如以下往期文章。 轻量级的Spring Cloud Gateway实践&#xff0c;实现api和websocket转发轻松实现Nginx的HTTP与WebS…

基于Springboot+Vue的Java项目-网上超市系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

平衡二叉树(后序遍历,力扣110)

解题思路&#xff1a;采取后序遍历的好处是先遍历节点得到高度&#xff0c;然后再判断高度差是否大于一&#xff0c;如果是的话就返回-1&#xff0c;不是就返回两高度中较大的高度加一就是父节点的高度 具体代码如下&#xff1a; class Solution { public: int travel(TreeN…

图搜索算法详解

图搜索算法是一系列用于遍历图结构的算法&#xff0c;图是由节点&#xff08;也称为顶点&#xff09;和连接这些节点的边组成的数据结构。这些算法在众多领域都有应用&#xff0c;例如社交网络分析、路径规划、数据挖掘和推荐系统等。以下是图搜索算法的详解&#xff1a; 基本…

springboot+PageHelper在多数据源的情况下,数据库方言乱套怎么解决?

web项目必然会涉及到数据分页&#xff0c;而PageHelper是个不错的插件&#xff0c;能方便不少事。 在最近的一个项目中&#xff0c;需要聚合多方数据&#xff0c;就涉及到配置多数据源&#xff08;各方使用的不是一种类型的数据库&#xff09;&#xff0c;开始以为正常配置就好…