经过几天的学习,终于对equals的用法有了比较全面的认识,并做一个总结。

1.equals的本意——即在Object对象中定义的equals()方法有什么样的意义。

(此处先附上==的作用,后面仍有叙述。因为==和equals()方法的关系是很密切的,后面有我自己的看法。

==用于比较引用和比较基本数据类型时具有不同的功能:

比较基本数据类型,如果两个值相同,则结果为true

而在比较引用时,如果引用指向内存中的同一对象,结果为true)

public  boolean equals(Object obj)

其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.

public class Fish {

private int weight;

private String color;

public Fish(int weight, String color) {

this.color = color;

this.weight = weight;

}

public int getWeight() {

return weight;

}

public void setWeight(int weight) {

this.weight = weight;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

}

public class EqualsTest {

public static void main(String[] args) {

Fish f1 = new Fish(1, "blue");

Fish f2 = new Fish(1, "blue");

System.out.println(f1 == f2);

System.out.println(f1.equals(f2));

}

}

——————运行结果为——————

false

false

由此可见,equals()方法的本意为确定两个对象的引用是否相同。

2.而JDK类中有一些类覆盖了oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:

java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)

public class EqualsTest {

public static void main(String[] args) {

String s1=new String("sss");

String s2=new String("sss");

System.out.println(s1==s2);

System.out.println(s1.equals(s2));

}

}

————————运行结果为——————

false

true

由此知道,在String中equals()方法被进行了覆盖,使其意义变为比较两个对象的内容是否一致

3.如果我们要自己覆盖equals()方法,让其比较内容或者有别的使用方法(当然我们一般都是用于比较内容的,但是覆盖的方法中真正的实现究竟是什么样的,谁知道呢O(∩_∩)O~)

public class Fish {

private int weight;

private String color;

public Fish(int weight, String color) {

this.color = color;

this.weight = weight;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + ((color == null) ? 0 : color.hashCode());

result = prime * result + weight;

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Fish other = (Fish) obj;

if (color == null) {

if (other.color != null)

return false;

} else if (!color.equals(other.color))

return false;

if (weight != other.weight)

return false;

return true;

}

public int getWeight() {

return weight;

}

public void setWeight(int weight) {

this.weight = weight;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

}

public class EqualsTest {

public static void main(String[] args) {

Fish f1 = new Fish(1, "blue");

Fish f2 = new Fish(1, "blue");

System.out.println(f1 == f2);

System.out.println(f1.equals(f2));

}

}

——————运行结果为——————

false

true

此例子中我复写了equals()方法和hashcode()方法,使得equals()方法脱离的本意,不再是比较两个对象的引用是否相同,而是比较其内容是否相同。

以上内容为一般书上的总结,下面是我自己想到的一些东西。

我们可以知道计算机归根到底进行的只是一些二进制数的与或非运算,加法乘法运算。由此有了些基本的运算符,所有的函数本质上其实现都是使用基本运算符来实现的。而==是基本运算符中的一个,它的作用:用于比较引用和比较基本数据类型时具有不同的功能:

比较基本数据类型,如果两个值相同,则结果为true

而在比较引用时,如果引用指向内存中的同一对象,结果为true

而equals()作为方法,我们可以推测知道,它其中的实现所使用的肯定是==运算符。再进一步的思考,equals()本意不正是==运算符进行对象比较时候的作用吗。那么,既然是两者有同样的作用,为什么还要弄出一个equals()方法来呢。因为==运算符不允许我们进行覆盖,也就是说它限制了我们的表达。在上面的第三个例子中,我们复写equals()方法,达到比较对象内容是否相同的目的。而这些通过==运算符是做不到的。

java .equal_Java中的equals()相关推荐

  1. java .equal_Java 中的equals()方法

    equals() 方法用于将字符串与指定的对象比较. String 类中重写了 equals() 方法用于比较两个字符串的内容是否相等. 语法 public boolean equals(Object ...

  2. java继承中的 equals + hashCode+toString

    [0]README 0.1)本文转自 core java volume 1, 旨在理清 equals + hashCode方法: 0.2) 特别说明: 在java中, 只有基本类型不是对象, 例如,数 ...

  3. Java包装类中的equals方法

    基本数据类型包装类中的equals方法用于比对相同包装类中的值是否相等,如果两者比较的包装类类型不同则返回false: 1.基本型和基本型封装型进行"=="运算符的比较,基本型封装 ...

  4. java == equals_java中==与equals

    == ==可用于比较基本类型与引用类型,对于基本类型变量比较的是其存储的值是否相等,对于引用类型则比较的是其是否指向同一个对象. 如: int a = 10; int b = 20; double d ...

  5. java中equals函数所在的类,重写Java中的equals方法介绍

    Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...

  6. JAVA入门级教学之(Object类中的equals方法)

    package com.lbj.javase18; /**  * 关于Object中的equals方法:  *   * Object中的equals方法(核心):  *  public boolean ...

  7. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  8. java中==和equals的区别

    package com.atguigu.java1;import java.sql.Date;/** * equals()和==的区别* *一.回顾==的使用*==:运算符* 1.可以使用在基本数据类 ...

  9. 面试必问一:Java 中 == 和 equals 的区别你知道吗

    面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本 ...

最新文章

  1. CentOS中安装MySQL数据库
  2. 从直觉主义到量化分析 让大数据做主
  3. HDU4292-Food-网络流
  4. rabbitmq java教程_GitHub - maxwellyue/rabbitmq-tutorial-java: RabbitMQ官方教程的翻译和说明--Java版...
  5. AI识虫:林业病虫害数据集和数据预处理方法
  6. OpenGL纹理矩阵,alpha混合和丢弃
  7. [线性代数]Note3--乘法和逆矩阵
  8. HA集群实现原理 切换 JAVA_HA(一)高可用集群原理
  9. 举例子说明什么是迭代什么是递归【转载】
  10. python requests form data_python使用requests发送multipart/form-data请求数据
  11. 阿里云负载均衡器(SLB)的配置方法
  12. 7年老员工的6点离职忠告
  13. SQL正则表达式的妙用
  14. mx350显卡天梯图_显卡天梯图2020新排行榜
  15. Emacs安装配置yasnippet
  16. MongoDB分片入门
  17. 对马的幽灵是关于人的
  18. RT_thread空闲线程及两个常用的钩子函数
  19. “快乐宝宝”风波始末 (三)
  20. 苹果在高端手机市场碾压安卓手机,国产旗舰不入前十

热门文章

  1. Keras-11 GAN MNIST
  2. 负margin应用案例几则(转载+总结)
  3. [转]每秒处理10万订单乐视集团支付架构
  4. windows 8.1 IE11 和 windows 10 Edge IE11 FlashPlayer 的安装与卸载
  5. Trace文件过量生成问题解决
  6. python 爬取_使用 Python 和 BeautifulSoup 来做爬虫抓取
  7. non thread safe php vc11,PHP 中什么线程安全(TS)和非线程安全(NTS)
  8. mysql 从库修改表结构_在mysql数据库中---修改表结构
  9. 设计模式之单例模式介绍
  10. c语言到底写什么系统,用C语言写关于操作系统的一个问题。