java学习笔记23:==和equals()方法的区别、equals方法的重写、阅读Object和String的源码
2019-01-23 17:13
465 查看
版权声明:本文为博主原创/转载的文章,仅作为学习交流使用。欢迎广大网友前来交流学习指正教导,愿我们共同进步。 https://blog.csdn.net/qq_42770701/article/details/86614128
一、“==”和equals()方法的区别以及equals()方法的重写
1、“= =”和equals()方法
“==”代表比较双方是否相同。
如果是基本类型则表示值相等;
如果是引用类型则表示地址相等即是同一个对象。
Object类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。比如,我们在公安系统中认为id相同的人就是同一个人、学籍系统中认为学号相同的人就是同一个人。
2、重写equals()方法
Object 的 equals 方法默认就是比较两个对象的hashcode(默认看地址是否相同),是同一个对象的引用时返回 true 否则返回 false。但是,我们可以根据我们自己的要求重写equals方法。
示例:重写equals()方法
/** * * @Title: TestEquals.java * @Package test * @Description: TODO(测试、重写equals()方法) * @author Charlie * @date 2019年1月23日 * @version V1.0 */ package test; /** * @ClassName: TestEquals * @Description: TODO(测试、重写equals()方法) * @author Charlie * @date 2019年1月23日 下午3:55:36 * */ public class TestEquals { /** * @Title: main * @Description: TODO(测试、重写equals()方法) * @param @param args 参数 * @return void 返回类型 * @throws */ public static void main(String[] args) { Object obj; String str; User u1 = new User(123, "老大", "123456"); User u2 = new User(123, "老二", "1234567"); //重写equals()方法前(使用默认的object的equals()方法),判断u1和u2是否相等, // 结果都为false,因为引用的地址是两个不同的对象 //重写equals()方法后(使用下面的equals()重写方法,判断u1和u2是否相等,结果: // ==为false(因为不是同一个对象),equals为true(因为只比较id,是同一个值) System.out.println(u1 == u2); System.out.println(u1.equals(u2)); //比较String类 String s1 = new String("Charlie"); String s2 = new String("Charlie"); System.out.println(s1 == s2); //false:比较的是两个不同的对象 System.out.println(s1.equals(s2)); //true:比较的是Charlie,完全相同 } } /** * * @ClassName: User * @Description: TODO(定义User类) * @author Charlie * @date 2019年1月23日 下午4:05:30 * */ class User{ int id; String name; String pwd; //重写User构造器,可以类内鼠标右键→Source→Generate Constructor using Fileds... public User(int id, String name, String pwd) { super(); this.id = id; this.name = name; this.pwd = pwd; } //自动生成时提供一个散链码,写不写都行 @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } //重写Object里的equals()方法 //现在只根据id进行判断,这里传的值是Object类型,需要转型, //可以类内鼠标右键→Source→Generate hashCode() and equals()...自动生成 @Override public boolean equals(Object obj) { if (this == obj) //如果传递的object和我相等,则返回true return true; if (obj == null) //如果传递的object为空,则返回false return false; if (getClass() != obj.getClass()) //如果传递的object类型不同,则返回false return false; User other = (User) obj; //如果上面都通过,则在这里强制转型为User if (id != other.id) //如果传递的object的id和我不相等,则返回false return false; return true; //如果上面都能顺利通过,则最后返回true } }
运行结果:
二、阅读Object、String源码
1、按Ctrl点击Object,可以找到里面有equals()方法
注:equals()方法使用时需要传个参数Object obj;
return (this == obj) 默认比较这两个的hashCode的地址是否相同,看是否是同一个对象,是则返回true,否则返回false
2、同1进入String类,里面也重写了equals()方法
如果两者相等,则返回true;
如果是String类型,则一直判断,对字符串内容的每一个字符进行比较,如果相同则返回true;
最后返回false。
相关文章推荐
- 多态Object类equals方法学习笔记ObjectDemo.java
- java String 源码阅读笔记以及Unicode的学习
- Java学习笔记之Object类以及equals()方法
- 【Java学习笔记】重写equals()方法
- java学习笔记——Object的equals方法
- 学习笔记-JAVA-考点10-什么情况下需要重写equals和hashcode()两个方法?
- java学习中重写与重载方法的区别(转自:小鸟的天空)
- Java学习笔记之五——关于"equals"和“==”的区别
- Java源码之String.equals方法的实现
- Java学习笔记——双等号和equals的区别
- java学习笔记之String的方法
- 源码阅读笔记:java.lang.Object
- JDK源码学习之重写hashCode()和equals()方法
- Java开发学习之道:Java开源项目源码阅读方法及二次开发方法
- [原]Java程序员的JavaScript学习笔记(5——prototype和Object内置方法)
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- Java 重写与重载区别 Java父类的Object方法 要重写tostring原因,多个catch处理逻辑
- Java中equals和==的区别?为什么重写equals方法后,一定要重写hashCode方法?
- 【Java学习笔记之六】java三种循环(for,while,do......while)的使用方法及区别
- Java 学习笔记 04 String 、StringBuilder 和 StringBuffer区别和联系