==和equals的区别

146 阅读1分钟

==和equals的区别:

==

==判断符号用于比较基本类型和引用类型,再比较基本数据类型时,比较的是值,比较引用类型时比较的是引用(指针),即判断两个引用是否指向同一个对象

基本类型比较:

        int a=4,b=5,c=4;
	System.out.println(a==b);//false
	System.out.println(a==c);//true

引用类型比较:

        String s1 = "hello"; //s1指向字符串常量池中的"hello"字符串对象 
 	String s2 = "hello"; //s2也指向字符串常量池中的"hello"字符串对象 
	System.out.println(s1 == s2); //true 
	String s3 = new String("hello"); //s3指向的是堆内存中的字符串对象 
	System.out.println(s1 == s3); //false

s1和s2都指向常量池中的hello字符串,所以返回true

s1和s3指向的是不同的字符串对象,所以返回false,


equals:

equals是object类的原始方法,即所以对象都有equals方法,默认情况下是引用比较,但是有很多类重写了equals方法

equals本质上就是==,但是string和integer等重写了equals方法,将他变成了值的比较

示例:

public class EqualsDeng {

private String name;

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public EqualsDeng(String name) {
	this.name = name;
}

public static void main(String[] args) {
	EqualsDeng p1=new EqualsDeng("小博");
	EqualsDeng p2=new EqualsDeng("小博");
	System.out.println(p1.equals(p2));//false		
}

}

equals本质上就是==

但是有例外 比如:

        String s1=new String("小杰");
	String s2=new String("小杰");
	System.out.println(s1.equals(s2));//true

这是因为string类重写了object的equals方法,从引用比较变成了值比较