Object 通用方法容易混淆的定义

先搞清楚各自的定义

  • "==" 用来判断 相等
  • equals() 用来判断 等价
  • hashcode() 用来返回散列值

“==”相等

  • 基本类型,判断两个值是否相等
  • 引用类型,判断两个变量是否引用同一个对象

在Object中未被重写的定义

  • hashcode()是为默认对象的内存地址

  • equals() 比较对象的地址

是本地方法 c,c+语言直接返回对象的内存地址

equals() 等价

引用类型中判断引用的对象是否等价

public class equalExample{
private int x;
private int y;
private int z; public equalExample(int x, int y, int z){
this.x=x;
this.y=y;
this.z=z;
} @override
public boolean equals(Object o){
if(this.o==o) return true; // 引用同一个对象
if(o==null | getClass()!=o.getClass()) return false; // 检测是否同一个类型
// object 对象转型
equalExample that=(equalExample)o;
if(x!=that.x) return false;
if(x!=that.y) return false;
return z==that.z;
}
}

hashCode()返回散列值,而equals()用来判断两个对象是否等价

等价的两个对象散列值一定相同,相同的两个对象不一定等价

在覆盖equals()方法时应该总是覆盖hashCode()方法,保证等价的两个对象散列值也相等

// 实现equals重写,没有实现 hashcode重写
equalsExample e1=new equalsExample(1,1,1);
equalsExample e1=new equalsExample(1,1,1); System.out.println(e1.equals(e2)); // true HashSet<equalsExample> set=new HashSet<>();
set.add(e1);
set.add(e2);
System.out.println(set.size()); // 2

equals(), "== ",hashcode() 详细解释的更多相关文章

  1. 讲的很详细的一篇关于object equals() & hashCode() 的文章

    转: 讲的很详细的一篇关于object equals() & hashCode() 的文章 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java ...

  2. .htaccess语法之RewriteCond与RewriteRule指令格式详细解释

    htaccess语法之RewriteCond与RewriteRule指令格式详细解释 (2012-11-09 18:09:08) 转载▼ 标签:  htaccess it 分类: 网络 上文htacc ...

  3. equals(),hashcode(),克隆学习心得

    equals(),hashcode(),克隆学习心得 其实在开发时候,很少去重写equals(),hashCode()方法,但是有些时候业务需要还是要重写. 注意: 重写equals()方法一定要重写 ...

  4. cookie的详细解释

    突然看到网页上中英文切换的效果,不明白怎么弄得查了查 查到了cookie 并且附有详细解释 就copy留作 以后温习 http://blog.csdn.net/xidor/article/detail ...

  5. tar命令的详细解释

    tar命令的详细解释 标签: linuxfileoutputbashinputshell 2010-05-04 12:11 235881人阅读 评论(12) 收藏 举报  分类: linux/unix ...

  6. Linux学习笔记15——GDB 命令详细解释【转】

    GDB 命令详细解释 Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具. 和所有常用的调试工 ...

  7. C语言 - 结构体(struct)比特字段(:) 详细解释

    结构体(struct)比特字段(:) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struc ...

  8. 姿势体系结构的详细解释 -- C

    我基本上总结出以下4部分: 1.问题的足迹大小. 2.字节对齐问题. 3.特别保留位0. 4.这种结构被存储在存储器中的位置. #include <stdio.h> #include &l ...

  9. Java - 面向对象(object oriented)计划 详细解释

    面向对象(object oriented)计划 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24058107 程序包括 ...

随机推荐

  1. redis:key命令(二)

    设置一个key:set name hello 获取一个key的值:get name 查看所有的key:keys * 查看key是否存在:exists name 移动key到指定库:move name ...

  2. 树莓派4b 上手三板斧

    树莓派4b 上手三板斧 1.无屏幕和网线连接准备 windows / mac 电脑下载安装Notepad++ 新建文件并保存为ssh(该文件为空文件) 新建文件wpa_supplicant.conf ...

  3. react useCallback notice

    多个不同输入框共用一个方法时使用useCallback: params = initParams = {code: "code_test", name: "name_te ...

  4. 用 Python 黄图批量鉴别审核

    前言 最近写了一款微信小程序需要用到图片审核,人工审核是不可能的人工审核的太费精力了,所以我就写了一个多线程批量识别脚本来处理,主要是调用百度AI的接口,这里我是付费了也不贵审核一条1分钱不到,再说我 ...

  5. 记使用STL与unique_ptr造成的事故-段子类比

    最近由于业务需要在写内存池子时遇到了一个doule-free的问题.折腾半个晚上以为自己的眼睛花了.开始以为是编译器有问题(我也是够自信的),但是在windows下使用qtcreator vs2017 ...

  6. Centos 7服务器搭建MySQL(mariadb)服务

    1.下载并安装MySQL yum install mariadb mariadb-server -y 2.启动MySQL systemctl start mariadb 3.对mariadb进行初始化 ...

  7. strpos的坑

    $a = 'abcd'; $c = 'a'; echo strpos($a,$c)!==false ? '原来是兄弟' : '非我族类,砍ta';

  8. [Batch 脚本] 批量生成文件夹

    @echo off echo start set time=30000 echo %time% for /l %%i in (1,1, %time%) do ( echo %%i% md " ...

  9. Linux系统管理第一二三四章 系统管理 目录和文件管理 安装及管理程序 账号管理

    命令 功能 序号 第一章   cd 切换目录 1 stat 查看文件状态信息 2 cp 复制   -f -i -p -r 3 du 统计磁盘的大小 4 find 精细查找文件和目录 5 help 帮助 ...

  10. java 之 学习过程中遇到的大佬博客

    大佬1号:zejian 博客:https://blog.csdn.net/javazejian