一道面试题:
public class Person
{
private int age;
private String name;
public Person()
{}
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public PersonTest
{
public static void main(String [] args)
{
Person p1=new Person();
Person p2=new Person();
System.out.println(p1.equals(p2));
}
}
请问答案是啥?
点我查看答案
==是一个运算符
1、==适用于基本数据类型和引用数据类型
2、如果比较的是基本数据类型,则比较的是两个变量保存的数据是否相等。(不一定是类型相同,因为存在类型提升):
例如看如下代码:
int i=10;
int j=10;
double d=10.0;
System.out.println(i==j);//true
System.out.println(i==d);//true
3、如果比较的是引用数据类型,则比较的是两个对象内存中的地址值是否相等,即两个引用是否指向同一个对象。
String str1=new String ("flag");
String str2=new String ("flag");
System.out.println(str1==str2);//false
equles()是一个方法,非运算符
1、Object类中的equals()的定义
2、String类中的equals()的定义
3、通常情况下,我们自定义的类如果使用equals()的话,如果不重写,那么默认继承到的是Object类的equals()方法,但是像String类中的equals()方法进行过高重写以后的,作用是:比较两个对象的"实体内容"是否相同。
4、equals()方法的重写原则是:比较两个对象的实体内容是否相同。
答案是:false
总结一下:
== | equals() | |
---|---|---|
归类 | 是一个运算符 | 是一个方法 |
对于基本数据类型 | 对于基本数据类型,比较变量的数字(因为存在类型提升,所以类型不一定相同) | 不能对基本数据类型使用 |
对于引用数据类型 | 对于引用数据类型,比较的是两个对象的内存中地址值 | 如果不重写(Object类的方法,与==相等),如果重写了,则核心思想是:比较两个对象的实体内容(如:Person类中的age和name)是否相同。 |