== 与 equals 的区别
1.基本数据类型的比较:
基本数据类型变量指向的不是对象,不能调用方法,所以只能用 == 进行比较,并且比较的是数据类型的数值是否相等。
引用类型变量的比较:
引用类型变量指向的是对象,所以既可以用 == 进行比较,也可以用equals 进行比较。
== :
== 是java中的操作符,是不能重写的,如果两个引用使用==进行比较,那么比较的是引用指向的内存地址值是否相等。
equals:
equals是Object中的方法,每个对象都可以调用,再和其他方法比较是否相等,默认比较的是俩个引用所指向的对象内存地址值(和==号的作用一样),但是也可以在类中对equals方法进行重写,按照自己的逻辑来比较俩个对象。
下面代码说明:
private long id;
private String name;
private int age;
public Student() {}
public Student(long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
通常都是重写equals方法 依次比较(1)(2)(3)(4)
s1.equals(s2) 《======》 this 和 other
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
//(1)s1和s2是不是指向同一个对象 如果是,相等,true
if (this == obj)
return true;
//(2)s2是不是null,如果是,一定不相等
if (obj == null)
return false;
//(3)s1对象的类实际型和s2对象的实际类型是否相等
if (this.getClass() != obj.getClass())
return false;
//(4)自定义比较,什么情况下s1,s2想等,自己定义条件比较
Student other = (Student) obj;
if(this.id==other.id && this.name.equals(other.name) && this.age==other.age) {
return true;
}
return false;
}
注意:
字符串(String)要用equals比较,按字符一个一个比较
如果用==比较,则比较的是内存地址