面试题 equals和==的区别
在java中,equals和 == 的最大区别就是 (==)是运算符,equals是方法
1.关系操作符==
==可以使用在基本数据类型变量和引用数据类型变量中
1.1基本数据类型变量
当使用==来判断两个变量是否相等的时候,如果两个变量是基本类型变量,且都是数值类型,则只要两个变量的值相等就返回true。
public static void main(String[] args) {
int i = 10;
int j = 10;
System.out.println(i == j);
}
运行结果:true
1.2引用数据类型变量
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
public class Test {
public static void main(String[] args) {
Person per1 = new Person("小甘", 25);
Person per2 = new Person("小杨", 30);
System.out.println(per1 == per2);
}
}
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:false
2.equals()只适用引用数据类型
对于引用数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的
public static void main(String[] args) {
Person per1 = new Person("小甘", 25);
Person per2 = new Person("小杨", 30);
System.out.println(per1.equals(per2));
}
}
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
运行结果:false
总结:
1.对于==关系操作符,比较的是变量在内存中指向的地址是否一致,基础数 据类型由于存储的值都在栈内,且值是共享的,所以比较的就是值是否一 致,引用类型比较的就是引用的地址是否一致。
2.对于equals方法,equals不能作用与基本数据类型。
如果在类内部没有对其进行重写,则含义同==相同,比较的是变量引用的地址是否一致。
诸如String、Date、File等类在内部对于equals方法进行了重写,因此比较的还是变量的值是否一致。

浙公网安备 33010602011771号