==和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方法,从引用比较变成了值比较