Java Equals和==的区别
在Java中,equals方法和==运算符跟对象的比较有关,他们之间的主要区别在于,equals方法用于检查两个对象的值是否相等,而==用于检查两个对象的引用是否指向同一个对象。
一、==运算符
1、在Java中,==运算符主要用于比较两个基本类型(如int,char)的值或者两个引用类型的引用是否相同。
int x = 5; int y = 5; System.out.println(x == y); // 输出:true
2、当用于比较两个引用类型时,==比较的是两个引用是否指向同一个对象,而不是他们的值。
String s1 = new String("Hello"); String s2 = new String("Hello"); System.out.println(s1 == s2); // 输出:false
二、equals方法
1、equals方法是Object类的方法,用于检查两个对象的值是否相同。它在Object类中的默认实现是使用==比较两个对象是否为同一个对象。
String s1 = new String("Hello"); String s2 = new String("Hello"); System.out.println(s1.equals(s2)); // 输出:true
2、但是,很多类(如String,Integer等)都覆盖了equals方法,使其变成了比较值是否相同,而不是比较引用是否同一个对象。
Integer i1 = new Integer(5); Integer i2 = new Integer(5); System.out.println(i1.equals(i2)); // 输出:true
三、注意事项
1、在使用equals方法时,我们需要注意如果调用equals方法的对象为null,会抛出NullPointerException。
String s1 = null; String s2 = "Hello"; System.out.println(s1.equals(s2)); // 抛出 NullPointerException
2、另一点要注意的是,如果两个相比较的对象,它们的类型并不相同,equals方法将返回false。
Integer i1 = new Integer(5); String s2 = "Hello"; System.out.println(i1.equals(s2)); // 输出:false