对于java中的equals的方法 主要用于比较,用于检测一个对象是否等于另外一个对象
equals 方法属于Object 类 Object 类是最高级别的类
(Object 是 Java 类库中的一个特殊类,也是所有类的父类。 也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量)
1.当用于String类比较时:
当我们要比较字符串类型的内容时,我们不能用==来进行比较,应该用equals方法。
代码如下:
public class A {
public static void main(String[] args) {
String a = "123";
String b = "123";
System.out.println(a.equals(b));
}
}
代码运行结果是ture
这是最常用的一种写法,可以在其他文章看一下equals的内置方法。
下面是String的equals写法
public boolean equals(Object anObject) {
//判断是否为同一个值,如X=X
if (this == anObject) {
return true;
}
//判断是否为String对象
if (anObject instanceof String) {
String anotherString = (String)anObject;
//此处value是String类中定义的当前调用此方法的String转换成的char数组
int n = value.length;
//判断调用String的char数组和比较String的char数组长度是否一致
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
//循环判断每个字符是否一致
while (n– != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
2. equals方法重写
如果我们这样写的话
class B{
public String i;
public B(String i) {
this.i=i;
}
}
public class A {
public static void main(String[] args) {
B b1 = new B("123");
B b2 = new B("123");
System.out.println(b1.equals(b2));
}
}
他的结果是false
用java堆栈的解释就是 栈 b1 和b2在new一个对象的时候,他们的指向地址是在堆里是不同的, 所以 equals比较他们的地址就会显示false
这样我们必须重写一下equals
class B{
public String i;
public B(String i) {
this.i=i;
}
public boolean equals(Object obj) {
B b = (B)obj;//强制转换
return this.i.equals(b.i);
}
}
public class A {
public static void main(String[] args) {
B b1 = new B("123");
B b2 = new B("123");
System.out.println(b1.equals(b2));
}
}
这样输出的就是true