Java的==和equals方法
==用法
首先我们先来介绍一下==的用法,在java中
== 是对基本数据类型的内容来进行比较,也可以对相同的对象来进行比较
1.在java中如果 == 比较的是基本数据类型的话,那么则是判断两个数据的内容是否相等,下面用代码展示一下:
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 1;
char ch = 'a';
char ch1 = 'b';
char ch2 = 'a';
System.out.println(a == b);
System.out.println(a == c);
System.out.println(ch == ch1);
System.out.println(ch == ch2);
}运行后结果代码:
false true false true
由此可见,使用==来比较基本数据类型的时候,表示的是判断两个值是否相等,那么我们来比较一下对象试一下:
public static void main(String[] args) {
BlogUser blogUser = new BlogUser();
BlogUser blogUser1 = new BlogUser();
System.out.println(blogUser == blogUser1);
}结果为:
false
由此可见,虽然两个实例是同一个实体类创建,但是其实是保存在不同的内存地址中,因==如果比较的是对象的话则是比较对象的地址并不是内容,所以,结果为false
equals用法
可能大家都清楚Object类是java的父类,而equals是Object类的一个方法,所以equals也可以说是所有类的方法
equals方法主要用于两个对象的比较
让我们先来看一下在Object类中的equals的源码:
public boolean equals(Object obj) {
return (this == obj);
}可以看见,Object类中的equals也是使用的==来进行比较,也就是与 == 一样来比较对象的地址,也就是说,如果我们不重写equals方法的话,那么依然是比较对象的地址,而不是对象的数据值是否相当,实际还是使用 == 来进行比较的.
但是有一个众所周知的类,叫String,这个类相信大家都不陌生,
因为String类已经重写了equals方法
我们先来看一下String类重写equals后的源码:
public boolean equals(Object anObject) {
//首先使用==判断地址值是否相等,如果相等,则直接返回true,因为地址值相等那么相当于内容相等
if (this == anObject) {
return true;
}
//判断传入对象的类型是否为String类型
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;
}下面我们使用String重写的equals:
public static void main(String[] args) {
BlogUser blogUser = new BlogUser();
BlogUser blogUser1 = new BlogUser();
System.out.println(blogUser.equals(blogUser1));
String s1 = "123456";
String s2 = "111111";
String s3 = "123456";
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
}结果如下:
false false true
可以看出String重写的equals方法是比较值是否相等,
总结
在基本数据类型中,使用==则是比较两个数据的值是否相等,而在对象中则是比较两个对象的地址值是否相等
使用Object.equals则是比较对象的地址值是否相等,而String.equals则是比较值是否相等.
如有错误,希望指出,谢谢


京公网安备 11010502036488号