java ==与equals()

一道面试题:

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)是否相同。
原创文章 86 获赞 50 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qizhi666/article/details/103898042