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则是比较值是否相等.
如有错误,希望指出,谢谢