== 和 equals
- == 比较基本的数据类型,比较的是值 ; 比较引用类型 : 比较引用指向的值(地址)
String s1 = new String("xsj");
String s2 = new String("xsj");
System.out.println(s1 == s2);
String s3 = "xsj";
String s4 = "xsj";
System.out.println(s3 == s4);
System.out.println(s1 == s3);
String s5 = "xsjxsj";
String s6 = s3 + s4;
System.out.println(s5 == s6);
final String s7 = "xsj";
final String s8 = "xsj";
String s9 = s7 + s8;
System.out.println(s5 == s9);
final String s10 = s3 + s4;
System.out.println(s5 == s10);
- equals 默认比较的也是地址,因为这个方法的最初定义在Object上,默认的实现就是比较地址,如果是自定义的类,如果需要比较的是内容,那么就要像String,重写equals方法
import java.util.Objects;
public class Main {
public static void main(String[] args) {
Student s1 = new Student(1);
Student s2 = new Student(1);
System.out.println(s1.equals(s2));
}
}
class Student {
int val;
public Student(int val) {
this.val = val;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return val == student.val;
}
@Override
public int hashCode() {
return Objects.hash(val);
}
}