Object
类是类层次结构的根类。每个类都使用 Object
作为超类。所有对象(包括数组)都实现这个类的方法,学习Object
类的六个方法——equals(Object obj)、finalize、toString、hashCode、getClass、clone
目录
==和equals的对比
一、==的作用
二、equals方法
定义和作用
源代码
String重写equals方法
String类中的equals源代码(jdk8)
运行逻辑
while循环的流程分析
Interger重写equals方法
源代码
应用
==和equals的对比
==是一个比较运算符
一、==的作用
1.==:既可以判断基本类型,又可以判断引用类型
2.==判断基本类型的时候,判断的是值是否相等
eg:int n1 = 10;
double d1 = 10.0
package com.hspedu.object_;
public class Equals01 {
public static void main(String[] args) {
int n1 = 10;
double d1 = 10.0;
System.out.println(n1== d1);
}
}
3.==判断引用类型的时候,判断的是地址是否相等,即判定是不是同一个对象
package com.hspedu.object_;
public class Equals01 {
public static void main(String[] args) {
//基本类型
int n1 = 10;
double d1 = 10.0;
System.out.println(n1== d1);
//引用类型
A a = new A();
A b = a;
A c = b;
System.out.println(a==b);//true
System.out.println(a==c);//true
System.out.println(b==c);//true
}
}
class A{}
对象引用a,b,c指向同一个对象,所以他们的地址是一样的,结果为true
运行结果
编译类型不一致时
总结:主要看是不是指向同一个地址空间
二、equals方法
定义和作用
equals不是运算符,是Object类中的方法,只能判断引用类型
子类中往往重写该方法,用于判断内容是否相等。比如lnteger、String
源代码
Ctrl+B
public boolean equals(Object obj) {
return (this == obj);
}
String重写equals方法
用equals比较两个字符串是否相等
"hello".equals("abc");
String类中的equals源代码(jdk8)
public boolean equals (Object anObject){//传入的时候已经完成了向上转型
if (this == anObject) {//如果是同一个对象
return true;//返回 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;//如果返回false,就终止while循环
i++;
}
return true;//如果两个字符串的所有字符都相等,则返回 true
}
}
return false;//如果比较的不是字符串,则直接返回 false
}
运行逻辑
1)先判断地址是否相同(是否指向同一个对象空间),如果是的话,返回true,结束比较
2)判断运行类型是不是String类,如果是的话,执行步骤3,不是返回false
3)判断字符串的长度是否相等,
4)将字符串----->字符型数组,然后一一比较数组内的元素是否相等
while循环的流程分析
Interger重写equals方法
源代码
/* Interger也重写了equals方法,变成了判断两个值是否相同 public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; } */
应用
Integer integer = new Integer(5);
Integer integer1 = new Integer(5);
System.out.println(integer == integer1);//比较地址,输出false
System.out.println(integer.equals(integer1));
一个为false,一个为true