==的用法
之前提到过, == 是比较运算符,但对于应用来说可以分为两种。
- 当 == 号前后为基本类型变量时, == 号两边比较的是数值大小、Unicode码值以及boolean值。
- 当 == 号前后为引用类型变量时,比较的则是堆内存中的地址。
equals()的用法
equals()顾名思义,就是一个专门做比较的一个方法,而我们平时经常使用的equals()方法有两种。
- 第一种是Object中的equals()方法,这个方法里面运用的是 == 来比较的,所以比较的是堆内存中的地址,由于这个作用不大,所以我们一般会在自己定义的类中把这个方法重写。
public boolean equals(Object obj) {
return (this == obj);
}
- 第二种是String中重写的Object类,在这个方法中,首先比较的还是地址,用于判断是不是同一个类,如果不满足则会比较里面的内容,内容相同返回true,否则返回false,这个方法在开发中非常常用。
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()的方法是Object类,则使用equals()和 == 其实没有区别。
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1.equals(obj2));//false
System.out.println(obj1 == obj2);//false
/*以上两种比较本质上是相同的*/
- 而我们常用的情况就是在逻辑判断的时候做比较,判断两个变量是否相同,当比较两个基本类型的时候我们使用 == ,当比较字符串的时候我们会是用String的equals()方法。
System.out.println(1 == 1);//true
System.out.println("我很帅".equals("我很帅"));//你没看错,这个比较是true,我确实很帅。