java == 和 equals()方法的区别
一、==
1、可以使用于基本数据类型变量和引用数据类型变量中
2、如果比较的是基本数据类型变量,则比较的是变量中的值是否相等。(类型可以不相同)
3、如果比较的是引用数据类型变量,则比较的是两个对象的内存地址是否相等。
//==如果用于基本数据类型 比较的是两个变量的值是否相等
int a = 10;
int b = 10;
char c = 'a';
int d = 97;
double e = 10.0;
System.out.println(a == b);//true
System.out.println(c == d);//true
System.out.println(a == e);//true
//==如果用于引用数据类型 比较的是两个对象的内存地址值是否相等
User tom1 = new User("tom", 21);
User tom2 = new User("tom", 21);
String tc1 = new String("tc");
String tc2 = new String("tc");
System.out.println(tom1 == tom2);//false
System.out.println(tc1 == tc2);//false
二、equals()方法
1、equals()方法是属于java.lang.Object类里面的方法,只能用于引用数据类型;如果我们自定义的类没有重写这个方法,就会调Object类里面的equals()方法,由Object类里面的equals()方法可知,底层就是调用的 ==, 即判断两个对象的地址值是否相等。通常情况下,自定义的类重写equals()方法的话,会比较类中相应属性是否都相等。像String,Date,File等包装类都重写了equals()方法,比较的就是值是否相同。
//Object
public boolean equals(Object obj) {
return (this == obj);
}
User tom1 = new User("tom", 21);
User tom2 = new User("tom", 21);
String tc1 = new String("tc");
String tc2 = new String("tc");
System.out.println(tc1.equals(tc2));//truee
//没有重写equals()
System.out.println(tom1.equals(tom2));//false
//重写equals()后
System.out.println(tom1.equals(tom2));//true