Java中的比较总结

用74LS190和555定时器复刻经典交通灯:一个电子工程新手的实战避坑记录 本文记录了使用74LS190和555定时器复刻经典交通灯的实战过程,详细介绍了元件选型、电路搭建与调试的关键步骤。特别分享了555定时器参数设置、74LS190级联技巧以及状态机设计的避坑经验,为电子工程新手提供实用参考。 阅读详情

一.==运算符

==比较基本类型是比较值是否相等,比较引用类型是比较==两边的地址是否相等

如下图实例

public static void main(String[] args) {
        int a=1,b=1;
        System.out.println(a==b);
        String c=new String("abc");
        String d=new String("abc");
        System.out.println(c==d);
        String e="abc";
        String f="abc";
        System.out.println(e==f);
    }

运行结果:

true
false
true

为什么中间结果的地址会不相同呢

因为new会新在堆中开辟一个地址,导致两个地址不一样;

为什么下面结果的地址一样呢

因为e在使用完后会存入常量池中,f再使用的时候会先在常量池中寻找,寻找到了就直接使用常量池中的地址

二.equals()

equals()方法只能用来比较两个对象的地址是否相同,子类中往往重写了该方法,用于判断类容是否相同,比如Integer、String等。

public static void main(String[] args) {
        Person a=new Person("张三",20);
        Person b=new Person("张三",20);
        System.out.println(a.equals(b));
        Person c=new Person("李四",21);
        Person d=new Person("张三",21);
        System.out.println(a.equals(c));
        System.out.println(a.equals(d));
    }

    static class Person{
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public Person(){
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Person person = (Person) o;
            return age == person.age && Objects.equals(name, person.name);
        }

        @Override
        public int hashCode() {
            return Objects.hash(name, age);
        }
    }

运行结果:

true
false
false

注意:如果要比较我们自己定义的对象类容是否相等,必须在类中重写Object中的equals方法

三.基于Comparable接口类的比较

实现Comparable接口,重写CompareTo方法

如下例:

public static void main(String[] args) {
        Person a=new Person("张三",20);
        Person b=new Person("李四",18);
        Person c=new Person("王五",10);
        Person d=new Person("赵六",25);
        Person[] p=new Person[4];
        p[0]=a;
        p[1]=b;
        p[2]=c;
        p[3]=d;
        Arrays.sort(p);
        for (int i = 0; i < p.length; i++) {
            System.out.println(p[i].getName()+" "+p[i].getAge());
        }
    }

    static class Person implements Comparable<Person>{
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public Person(){
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }


        @Override
        public int compareTo(Person o) {
            return this.age-o.age;
        }
    }

运行结果:

已经按年龄升序排好了,如果想按降序排列,把comparaTo里的this.age-o.age改为o.age-this.age即可

王五 10
李四 18
张三 20
赵六 25

当然,这种方法的缺点就是不灵活,比较的方式已经固定死了,我们通常使用下面这种定义比较器的方法

四:自己定义比较器,实现Comparator接口

方法:自己定义比较器,实现Comparator接口,重写compara方法,相比于上面的方法,这种方法灵活很多,也广泛的被使用

public static void main(String[] args) {
        Person a=new Person("张三",20);
        Person b=new Person("李四",18);
        Person c=new Person("王五",10);
        Person d=new Person("赵六",25);
        Person[] p=new Person[4];
        p[0]=a;
        p[1]=b;
        p[2]=c;
        p[3]=d;
        Arrays.sort(p,new PersonComparator());
        for (int i = 0; i < p.length; i++) {
            System.out.println(p[i].getName()+" "+p[i].getAge());
        }
    }

    static class Person{
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public Person(){
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }
    static class PersonComparator implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            return o1.age-o2.age;
        }
    }

运行结果:

王五 10
李四 18
张三 20
赵六 25

我们也可以使用匿名内部类的方式来完成比较器,如下例:

public static void main(String[] args) {
        Person a=new Person("张三",20);
        Person b=new Person("李四",18);
        Person c=new Person("王五",10);
        Person d=new Person("赵六",25);
        Person[] p=new Person[4];
        p[0]=a;
        p[1]=b;
        p[2]=c;
        p[3]=d;
        Arrays.sort(p, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.age-o2.age;
            }
        });
        for (int i = 0; i < p.length; i++) {
            System.out.println(p[i].getName()+" "+p[i].getAge());
        }
    }

    static class Person{
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public Person(){
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }

运行结果:

王五 10
李四 18
张三 20
赵六 25

今天就到这里了,下期见!

新手必看:Infineon Memtools烧录配置全流程(附常见错误解决方案) 本文为嵌入式开发新手提供了Infineon AURIX开发环境搭建与Memtools烧录的全流程实战指南。详细解析了ADS、DAS和Memtools三大核心工具的角色与协同关系,并重点讲解了Memtools的图形界面配置步骤、烧录操作流程,以及针对“无法连接设备”、“编程失败”等常见错误的系统性排查与解决方案,帮助开发者快速上手并规避典型陷阱。 阅读详情

相关推荐

用Verilog搭出RISC-V架构单周期CPU

这是笔者学校暑期学期的必修课,难度并不高(仅追求及格的话),但相当耗时,对于在硬件设计方面完全不感冒的同学更是一场避不开的折磨,所以笔者想通过自己的成果和被折磨经验来帮助有此方面需求的同学,或是对于CPU设计有浓厚兴趣的人。

paticita的博客 1万+

Java两个对象之间的比较

1.对象之间的比较, 通过实现Comparable接口, 重写compareTo方法。

weixin_59548805的博客 449

MATLAB实战:用ARMAX模型搞定电力系统惯量实时评估(附完整代码)

本文详细介绍了如何利用MATLAB中的ARMAX模型实现电力系统惯量的实时评估。通过系统辨识技术,结合电力系统的动态特性,提供从数据预处理、模型辨识到实时评估的全流程实战指南,并附完整代码。ARMAX模型在新能源高渗透率电网中展现出显著优势,误差较传统方法降低50%以上。

b9c0d的博客 388

Java Comparable接口

java.lang.Comparable Comparable 接口

weixin_45713608的博客 949

随机变量序列 收敛 检验 matlab,利用MATLAB验证样条插值的收敛性

问题提出多项式插值是不收敛的,即插值的节点多,效果不一定就好。对样条函数插值又如何呢?理论上证明样条插值的收敛性是比较困难的,但通过本实验可以验证这一理论结果。.实验内容请按一定的规则分别选择等距或者非等距的插值节点,并不断增加插值节点的个数。考虑实验2.1中的函数或选择其他你有兴趣的函数。(中函数)。实验要求(1)随节点个数增加,比较被逼近函数和样条插值函数误差的变化情况。分析所得结果并与拉格朗...

weixin_30895121的博客 4733

【WorkBuddy】WorkBuddy 智能体快速上手:从零到一的实践指南

文章摘要: 传统自动化脚本难以应对灵活多变的自然语言需求,导致逻辑复杂、维护成本高。智能体(Agent)通过理解语义意图、动态决策和松耦合组件解决了这些问题。WorkBuddy采用声明式配置,通过可视化界面定义意图、实体和对话策略,无需编码即可快速构建智能体。其核心组件包括意图分类、实体提取、对话策略、故事样本和回退机制,适用于客服支持、知识问答等高频场景。通过环境准备(Python/Node.js/Redis)和简单配置,用户可以快速搭建可运行的智能体,显著提升自动化效率。

ruiqideng的博客 1596

Java中的排序接口Comparable和比较器Comparator详解

Java中的排序接口Comparable和比较器Comparator详解

向上的"狼"的博客 1万+

手把手教你学pcie--用Verilog搭建PCIe控制器核心模块

PCIe控制器是硬件设计的核心模块,负责实现设备与主机之间的高速通信。本文将以Verilog语言为例,分步骤讲解如何从零构建一个简化的PCIe控制器核心模块,涵盖事务层(TLP)生成、数据链路层(DLLP)处理和物理层(PHY)接口适配。目标是为嵌入式开发者、FPGA工程师提供一个可扩展的硬件设计框架。​。

MHD0815的博客 338

java中的比较方法

Java中比较的方法主要有以下几类一:==运算符==运算符常用来比较==左右两侧是否相等,如果左右两侧是基本数据类型,比较的是值是否相等;如果==左右两侧是引用类型,比较的是引用变量的地址是否相等 二:equals()equals()方法常用来比较两个对象的地址是否相同,如果要比较对象中的类容,必须重写Object中的equals方法 重写equals的方式虽然可以比较,但equals只能按照相等进行比较,不能按照大于、小于的方式进行比较。 三:基于Comparable接口类的比较方法:实现Com

yahid的博客 2606

【雕爷学编程】Arduino动手做(75)---TTL转RS-485模块之二线制可以实现真正的多点双向通信

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验七十五:TTL转RS-485模块 MAX485 RS485模块 MAX485 是一个8.

雕爷学编程 1万+

LoRa学习:LoRa通信调制解调的实现原理与性能

LoRa学习:LoRa调制解调原理与性能 1、LoRa调制解调器原理 LoRa调制解调器采用专利扩频调制和前向纠错技术。与传统的FSK、OOK调制技术相比,LoRa扩大了无线通讯链路的覆盖范围(实现了远距离无线传输),提高了链路的鲁棒性。。 开发人员可调整扩频因子和纠错率这两个参数,从而平衡通讯时的带宽占用、通信速率、空中包的存活时间、以及抗干扰性等。。 LoRa调制解调器...

HowieXue 薛永浩的博客 3万+

java compareable接口_Java中实现对象的比较:Comparable接口和Comparator接口

在实际应用中,我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的。所以Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性的大小来确定它们之间的大小关系。一般,Java中通过接口实现两个对象的比较,比较常用就是Comparable接口和Compar...

weixin_32256355的博客 565

DISK配置服务器软RAID工作任务(RAID1+BITLOCKER)-winserver4

DISK配置服务器软RAID工作任务(RAID1+BITLOCKER)-winserver4

新时代先锋的博客 7296

Java中的比较

equal只能按照相等进⾏⽐较,不能按照⼤于、⼩于的⽅式进⾏⽐较。三.

m0_73254011的博客 396

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java比较两个集合_比较Java中的两个集合

我在Java类中有两个集合.第一个集合包含以前的数据,第二个集合包含前一个集合中的更新数据.我想比较两个集合,但我不确定有效实现它的最佳方法.两个集合将包含相同数量的项目.然后根据我想要执行carType方法的每个集合中的carType相同.任何帮助表示赞赏解决方法:很难提供帮助,因为你没有告诉我们你如何比较(等号)集合.一些想法,希望一个适合:如果它们包含相同顺序的相同对象,则比较它们Itera...

weixin_33293858的博客 1320

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java中的比较器

Java中的比较器 Java中存在比较运算符:> 、< 、>=、<=、!=、==、instanceof 只能比较基本数据类型,如果对于对象无法进行比较,如果在对象中需要实现对象之间的比较,只能通过Comparable、Compartor接口实现 (1) Comparable接口(自然排序) String、包装类都已经默认实现了Comparable接口,并重写了int com...

qq_43437347的博客 450

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java中的代码比较管理

在Java开发中,代码比较管理是一项非常重要的技能。通过合理使用各种工具和方法,我们可以大大提高开发效率,确保代码质量。希望今天的分享能为大家在实际开发中提供一些帮助。如果你对这方面有更多的见解或问题,欢迎留言讨论。关注我,我们一起交流更多的技术干货!大家一起进步,共同提升开发技能,迎接每一个新的挑战!

weixin_46372265的博客 614

Java中的对象比较

“==” 永远是在比较地址,而equals是比较内容的值。

uDon的博客 869

Java中的比较运算符

Java中的比较运算符 比较运算符用于判断两个数据的大小,例如:大于、等于、不等于。比较的结果是一个布尔值( true 或 false )。 Java 中常用的比较运算符如下表所示: 注意哦: 1、 > 、 < 、 >= 、 <= 只支持左右两边操作数是数值类型 2、 == 、 != 两边的操作数既可以是数值类型,也可以是引用类型 public cla...

成长日记的博客 8879

java中的比较

今天,在牛客网上刷了一道简单的题,很惭愧做错了。题目如下: public class Demo { public static void main(String args[]) { String str=new String("hello"); if(str=="hello") { System.out.println("true"); } else { System.out.println("false");

u012881002的专栏 249

Java中的 == 比较的是什么

首先基本数据类型有:byte、short、int、long、float、double、char、boolean 用 == 比较基本类型时就是拿它们的字面量数值进行比较,相等即为true,否则为false **字面量:**例如:int a=8;这里的a是变量,它指向的值可以改变,而这里的8就是字面量,它创建好就不能变了,就是8,和常量有点像首先除了上述8中基本数据类型其余都为引用数据类 用 == 比较引用类型时就比较的是引用变量所指向的存储在堆内存(堆内存就是划出一片内存,名字叫堆,里面存储的是实例出的对象信

qq_56501283的博客 1452

java中的比较运算符

java中的比较运算符

xiaotai1234的博客 273
上一篇: TreeMap及TreeSet的总结(通俗易懂,轻松拿捏)
下一篇: 多线程初阶:进程调度基本过程
马可波罗.
博客等级 码龄5年 705粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马可波罗.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值