equals方法与==到底有什么区别

来源:互联网 发布:电脑怎么连接本地网络 编辑:程序博客网 时间:2024/06/08 12:53

==:是一个比较运算符,用来判断两个变量是否相等即两个对象在内存中的首地址是否相同。

equals ():是Object类提供的一个实例方法也就是说每个类都含有这个方法,如果不对其重写。它的作用是和==是一样的

如果不对其重写。

下面看个例子

package com.iss.test;


public class Test {

public static void main(String[] args) {

String s1, s2, s3 = "abc", s4 = "abc";

s1 = new String("abc");
s2 = new String("abc");

System.out.println(s3 == s4);// 结果为true这是因为在字符串池中如果已经有相同的字符串,就会将值直接赋给引用,因此它们指向的同一个对象
System.out.println(s1 == s2);// 結果为false这是因为它们的内存地址不一样,指向的对象不一样
System.out.println(s1.equals(s2));// 结果为true。为什么呢不是说它和==的作用是一样的吗?原因在于它把从Object继承而来的equals方法重写只要保证内容相同就返回true

// 但是在Stringbuilder中就没有对equals()进行重写所以结果为false;
StringBuilder builder = new StringBuilder("abc");
StringBuilder builder2 = new StringBuilder("abc");

System.out.println(builder.equals(builder2));

// 变为String类型就会相等了可见String对equals()进行了重写
System.out.println(builder.toString().equals(builder2.toString()));

}
}


Object 中默认的equals()和==是等价的只是比较内存的中的地址,我们可以通过重写equals()来自定义自己的等价规则

ps:对基本类型的比较只能是通过==进行比较因为他们没有equals()这个方法只要数值相同,可以不问他们的数据类型。这是因为java的自动数据类型提升。

int a = 10;
float b = 10.0f;
double c = 10.0000;

System.out.println(a==b);//true
System.out.println(a==c);//true


8个基本类型所对应的包装类型的equals()方法也被重写成只比较内容。


Integer num1=new Integer(12);
Integer num2=new Integer(12);

System.out.println(num1==num2);//false
System.out.println(num1.equals(num2));//true


总结:两者区别就在于equals()方法有没有被重写。



0 0
原创粉丝点击