Java中的equals方法详解,Java中的toString方法

news/2025/2/22 8:30:05/

目录

  • 第一章、Java中的两种比较方式:==比较和equals比较
    • 1)Java中的 "=="比较
    • 2)Java中的 equals比较
  • 第二章、重写toString方法
    • 1)toString方法
    • 2)重写equals和toString方法快捷键

第一章、Java中的两种比较方式:==比较和equals比较

1)Java中的 "=="比较

①== 是Java中的比较运算符
②比较基本类型时,比较的是双方的值
③比较引用类型时,比较的是双方的地址值

// 例二 字符串常量池是堆中一块特殊区域,多次使用String str=“字符串数据”创建同一个字符串数据时,会指向字符串常量池的同一个地址,所以地址一直是同一个,str0 == str1 是trueString str0 = "比较";String str1 = "比较";System.out.println("例1:" + (str0 == str1));//例二 而new出来对象在堆里,不同于前面的字符串常量池会指向同一个地址,而是会创建新地址,所以str3 == str4结果是falseString str3 = new String("地址");String str4 = new String("地址");System.out.println("new了以后都会在堆中建立新地址");System.out.println("例2:" + (str3 == str4));//false// 例三  基本数据类型,==判断的是值int a1 = 1;int a2 = 1;System.out.println("例3:" + (a1 == a2));

比较结果如下:可以看到==比较的是引用类型数据的地址,想不比较地址就需要用到equals方法

1true1false
new了以后都会在堆中建立新地址
例2false3true

2)Java中的 equals比较

①equals方法是object类中的方法,所以任何类都可以重写这个方法
ps:不懂什么是方法重写看这篇文章==》方法的重写和重载

②只能用于判断引用类型,重写后用于判断内容是否相等。
③不重写方法的花判断引用类型的地址值。所以一定要记得重写啊,不然白给。
下面是重写详解:

 //-------------------------------分割---------------------------------
class Person {private String name;private int age;//重写Object的equals方法public boolean equals(Object obj) {
//同对象判断,比较的两个对象是同一个对象返回trueif (this == obj){   //this代表调用equals方法的对象return true;}if (obj == null) { //传进来是null值,直接返回falsereturn false;}if (this.getClass() != obj.getClass()) { //getClass()返回Class类型的对象。return false;}
//同类型判断if (obj instanceof Person){  //obj是Person,我们才比较
//如果程序能够执行到此处,说明传入的不是null,并且不是同一对象,而且是两个对象都是Person类型的
//obj属于Object类型,Object类中没有定义过name、age、sex属性,为了获得属性强转操作:Object -> Person,Person p = (Person) obj;
//name是String类型,也是引用类型所以用equals,age是int类型用==就好return this.name.equals(p.name) && this.age == p.age;}//如果不是person,则直接返回false;return false;}//构造方法public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}
//getter&setter方法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;   }
}

测试equasl方法

/*
判断两个person对象的内容是否相等属性值一样,返回true,不同返回false*/
public class TestEquals {public static void main(String[] args) {Person p1 = new Person("张三", 22);Person p2 = new Person("张三", 22);System.out.println(p1 == p2);			//比较地址是否相等	falseSystem.out.println(p1.equals(p2));		//true}
}

第二章、重写toString方法

1)toString方法

①toString方法是object类中的方法,所以任何类都可以重写这个方法
②作用其实是为了方便转为字符串,打印输出,有些引用类型打印输出的时候是地址值这是很不方便的。比如在打印引用类型的时候System.out.println(xxx),自动调用toString()方法不用显式打出来。这是为了方便所有类的字符串操作而特意加入的一个方法
③实际例子如下:

class Person {private String name;private int age;private char sex;//构造方法public Person() {}public Person(String name, int age, char sex) {super();this.name = name;this.age = age;this.sex = sex;}
//getter&setterpublic 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;   }public char getSex() {	return sex;	}public void setSex(char sex) {	this.sex = sex;	}//重写toString方法@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", sex=" + sex +'}';}
}

未重写打印结果是地址值:

equals.Person@6e8dacdf

重写后打印结果如下内容

Person{name='张三', age=30, sex=}

2)重写equals和toString方法快捷键

ps:重写equals和toString方法非常的普遍,ide工具有直接生成方法重写的快捷方式:
eclipses 是:alt + shift + s
idea是:alt + insert


http://www.ppmy.cn/news/79693.html

相关文章

python正则表达式-正则基础

目录 一、任一元素 二、匹配特定的字符类别 1、\d \w 三、多个元素 1、两位元素 [][] 2、* ? 3、重复次数 {} 4、位置匹配 ^ $ 5、子表达式() 一、任一元素 []:1、[ab] 匹配a或b; 2、[0-9] 匹配任意一个数字&…

Linux下V4l2框架编程_USB摄像头数据采集

Linux内核版本:3.5.0 1.1 V4L2简介 v4L2是针对uvc免驱usb设备的编程框架,主要用于采集usb摄像头等。 这篇文章介绍V4L2框架读取摄像头数据的流程,介绍ioctl常用的命令参数,以及各种摄像头相关的结构体成员含义,最终完成数据采集。 编程模式如下: V4l2支持多种设备,它可…

六级备考25天|CET-6|听力第四讲|篇章满分技巧|全文听写带练|2022年6月考题12-15题|16:10~17:10

目录 1. 读题步骤 (1)听力前 (2)听力中 2. 复现听力原文 问题12 overturn 推翻 universal theory 通用的理论 evasive 不坦率的 模棱两可的 逃避的 规避的 问题13 问题14 nonetheless 无论如何 rigorously 严…

pix2pixHD代码---readme

1:基础配置 要求大于等于11G的显卡,安装pytorch,下载代码。 2:测试 dataset文件中放的是一些例子,下载cityscape的预训练权重,放入到checkpoints文件夹下,测试模型。测试结果放在results文件夹…

电力系统的虚假数据注入攻击和MTD系统研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

AI孙燕姿爆火,华语乐坛重温旧梦

最近在B站,AI孙燕姿火了。 浏览相关搜索页面,这位新晋“红人”翻唱了各种类型的歌曲,包括《红豆》《爱在西元前》《水星记》《安河桥》,甚至还有《向天再借五百年》,更重要的是,表现普遍不俗,俘…

BERT网络的原理与实战

BERT网络的原理与实战 一、简介二、原理1. Transformer2. BERT2.1 MLM2.2 NSP 3. Fine-tuning 三、实战1. 数据集2. 预处理3. 模型训练 一、简介 BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言…

前端搭建砸地鼠游戏(内附源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分✨ 完整代码 ✨ 写在前面 上周我们实通过前端基础实现了打字通,当然很多伙伴再评论区提出了想法,后续我们会考虑实现的,今天还是继续按照我…