"=="和equals

来源:互联网 发布:大连淘宝运营 编辑:程序博客网 时间:2024/06/03 15:00
package com.wang.charater.extend.string.model;/** * 注意: * String类是一个final类   不能被继承,equals()是Object的方法 *  * */public class Student {private String name;  //姓名private int age;      //年龄//带参构造方法public Student(String name,int age){this.name = name;this.age = age;}//自己定义比较方法,只有姓名和年龄都相同是一个对象@Overridepublic boolean equals(Object obj){Student stu =  (Student) obj;return this.name.equals(stu.name) && this.age == stu.age;}// 或是重写hashCode()和equals()/*@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}*/}
package com.wang.charater.extend.string.model;/** * equals 和 == * ==运用基本类型,通过实际的值相等判定是否相等;运用引用类型时表示地址,是否是一个对象 * equals()和hashCode()是java.lang.Object的方法,可以被重写,自己定义;对于字符串java.lang.String的类来讲 * 它的equals方法用来比较字符串的字符序列是否相等 * 只有重写equals()和hashCode()才是比较内容 *  *  * */public class EqualTest {public static void main(String[] args) {//比较两个学生是否是同一个人Student stu1 = new Student("光头强1",11);Student stu2 = new Student("光头强1",12);Student stu3 = new Student("光头强1",11);System.out.println(stu1.equals(stu2));System.out.println(stu1.equals(stu3));}}

小结:

1.只是重写hashCode()而不重写equals()则结果:虽然输出的哈希码一样,但不是同一个对象

2.当重写hashCode和equals方法后,这两者都是比较的是否是同一个对象(对象的地址)

3.对于String类比较特殊,该类重写了equals方法,只是比较的内容是否一样

0 0
原创粉丝点击