系列文章目录
前言
学会并理解 == 与 equals 的使用。
一、== 和 equals对比
== |
---|
判断基本类型和引用类型 |
判断基本类型是判断值是否相等 |
判断引用类型是判断地址是否相等 |
equals |
---|
equals是Object类中的方法,只能判断引用类型 |
默认判断的是地址是否相等,子类往往重写该方法,用于判断内容是否相等,比如Integer,String |
二、查看JDK源码
IDEA查看JDK源码 |
---|
一般来说IDEA配置好JDK以后,jdk的源码也就自动配置好了 |
如果没有的话点击菜单File --> Project Structure --> SDKs --> Sourcepath然后点击右侧绿色的加号 |
在需要查看某个方法源码时,将光标放在该方法,输入ctrl + b或者点击右键->go to -> Declaration |
//Object
public boolean equals(Object obj)
{
return(this == obj);
}
//Integer
public boolean equals(Object obj)
{
if(obj instanceof Integer)
{
return value == ((Integer)obj).intValue();
}
return false;
}
//String
public boolean equals(Object anObject) {
if (this == anObject) {//如果是同一个对象
return true;
}
if (anObject instanceof String) {//判断类型
String anotherString = (String)anObject;//向下转型
int n = value.length;
if (n == anotherString.value.length) {//如果长度相同
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])//然后一个一个的比较字符
return false;
i++;
}
return true;
}
}
return false;
}
三、重写equals
判断两个 Person 对象的内容是否相等, 如果两个 Person 对象的各个属性值都一样, 则返回 true, 反之 false。
package com.hspedu.object_;
public class EqualsExercise01 {
public static void main(String[] args) {
Person person1 = new Person("jack", 10, '男');
Person person2 = new Person("jack", 20, '男');
System.out.println(person1.equals(person2));//假
}
}
//判断两个 Person 对象的内容是否相等,
//如果两个 Person 对象的各个属性值都一样, 则返回 true, 反之 false
class Person{
//extends Object
private String name;
private int age;
private char gender;
//重写 Object 的 equals 方法
public boolean equals(Object obj) {
//判断如果比较的两个对象是同一个对象, 则直接返回 true
if(this == obj) {
return true;
}
//类型判断
if(obj instanceof Person) {
//是 Person, 我们才比较
//进行向下转型, 因为我需要得到 obj 的各个属性
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
} //如果不是 Person , 则直接返回 false
return false;
}
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
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 char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
}
总结
学会看JDK源码,更好的理解库方法。