博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
== 和 equals() 区别
阅读量:4128 次
发布时间:2019-05-25

本文共 4443 字,大约阅读时间需要 14 分钟。

@[TOC](== 和 equals() 区别)

1.equals方法

  1. 是一个方法,而非运算符
  2. 只能适用于引用数据类型,一般情况下用于判别两字符串的内容是否相同。
  3. Object类中equals()的定义:
public boolean equals(Object obj) {
return (this == obj);}

说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体,像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。

4. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写.
重写的原则:比较两个对象的实体内容是否相同.

2.==

  1. 既可以使用在基本数据类型变量上也可以使用在引用数据类型变量

  2. 比较:

    #如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
    #如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体。

  3. 补充:== 符号使用时,必须保证符号左右两边的变量类型一致。

3.举例

未重写equals方法:

import study.day_13.java1.Customer;import java.util.Date;class Equals{
private String name; private int age; 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; } public Equals() {
} public Equals(String name, int age) {
this.name = name; this.age = age; }}public class TestDemo{
public static void main(String[] args) {
System.out.println("基本数据类型**************"); int a=10; int b=10; int c=20; System.out.println(a==b); System.out.println(a==c); System.out.println("引用数据类型**************"); Equals eq1=new Equals("Tom",22); Equals eq2=new Equals("Tom",22); System.out.println(eq1==eq2);//false(比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) System.out.println("比较****************************"); String str1 = new String("atguigu"); String str2 = new String("atguigu"); System.out.println(str1 == str2);//false(比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) System.out.println(str1.equals(str2));//true(equals只能适用于引用数据类型,一般情况下用于判别两字符串的内容是否相同。) System.out.println(eq1.equals(eq2));//false(Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) Date date1 = new Date(32432525324L); Date date2 = new Date(32432525324L); System.out.println(date1.equals(date2));//true }}

结果为:

基本数据类型**************truefalse引用数据类型**************false比较****************************falsetruefalsetrue

重写equals方法:

import study.day_13.java1.Customer;import java.util.Date;import java.util.Objects;class Equals{
private String name; private int age; 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; } public Equals() {
} public Equals(String name, int age) {
this.name = name; this.age = age; } //重写equals方法 @Override public boolean equals(Object o) {
if (this == o) return true; if (!(o instanceof Equals)) return false; Equals equals = (Equals) o; return getAge() == equals.getAge() && Objects.equals(getName(), equals.getName()); } @Override public int hashCode() {
return 0; }}public class TestDemo{
public static void main(String[] args) {
System.out.println("基本数据类型**************"); int a=10; int b=10; int c=20; System.out.println(a==b); System.out.println(a==c); System.out.println("引用数据类型**************"); Equals eq1=new Equals("Tom",22); Equals eq2=new Equals("Tom",22); System.out.println(eq1==eq2);//false(比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) System.out.println("比较****************************"); String str1 = new String("atguigu"); String str2 = new String("atguigu"); System.out.println(str1 == str2);//false(比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体) System.out.println(str1.equals(str2));//true(equals只能适用于引用数据类型,一般情况下用于判别两字符串的内容是否相同。) System.out.println("重写equals方法后比较******"); System.out.println(eq1.equals(eq2));//true(重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。) Date date1 = new Date(32432525324L); Date date2 = new Date(32432525324L); System.out.println(date1.equals(date2));//true }}

结果为:

基本数据类型**************truefalse引用数据类型**************false比较****************************falsetrue重写equals方法后比较******truetrueProcess finished with exit code 0

转载地址:http://aerpi.baihongyu.com/

你可能感兴趣的文章
100道+ JavaScript 面试题,助你查漏补缺
查看>>
JavaScript深入理解之闭包
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
25个构建Web项目的HTML建议,你需要了解一下!
查看>>
【web素材】02-10款大气的购物商城网站模板
查看>>
6种方式实现JavaScript数组扁平化(flat)方法的总结
查看>>
如何实现a===1 && a===2 && a===3返回true?
查看>>
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
12 个JavaScript 特性技巧你可能从未使用过
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(上)
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
8种ES6中扩展运算符的用法
查看>>
【视频教程】Javascript ES6 教程28—ES6 Promise 实例应用
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
【web素材】03-24款后台管理系统网站模板
查看>>