【JAVA的一些容易记混的知识点1】判断JAVA数据是否相等

一、基本数据的相等

对于基本的数据类型,判断是否相等直接用 “==” 就可以了。容易记混的是对象的比较。

二、对象的相等

1.对象1==对象2

假设有两个对象,obj1、obj2。obj1==obj2的意思是,判断obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是 要求两个变量所指内存地址相等 的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。
如:

Employee9 alice1 = new Employee9("Alice", 75000, 1987, 12, 15);
Employee9 alice2 = alice1;
Employee9 alice3 = new Employee9("Alice", 75000, 1987, 12, 15);
System.out.println("alice1==alice2:" + (alice1 == alice2));
System.out.println("alice1==alice3:" + (alice1 == alice3));

结果如下:
运行结果
由于alice2是对alice1的引用,故二者的内存地址一致,结果为true。但是alice3是重新创建的对象,虽然内容与alice1一致,但是内存地址不同,所以结果为false

2.除1情况外的相等

除了1之外的相等,是两个不同对象之间的相等,如上图的例子:

Employee9 alice1 = new Employee9("Alice", 75000, 1987, 12, 15);
Employee9 alice3 = new Employee9("Alice", 75000, 1987, 12, 15);

或者

Employee9 alice1 = new Employee9("Alice", 75000, 1987, 12, 15);
Employee9 bob = new Employee9("Bob", 50000, 1987, 10, 15);

要想比较这种类型的对象是否相等,必须自己定义。因为一旦使用obj1==obj2,会自动使用情况1的规则来识别。

3.定义对象相等的规则

如果想要自定义两个对象(不是一个对象,即这两个对象分别有自己的一块内存)是否相等的规则,那么必须在对象的类定义中重写equals()方法,如果不重写equals()方法的话,默认的比较方式是比较两个对象是否为同一个对象。

重写equals()方法的步骤一般如下:
1、先用“==”判断是否相等。(即判断是不是情况1:引用自同一对象。

2、判断equals()方法的参数是否为null,如果为null,则返回false;

3、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false;

4、此时,当两个对象的类是同一类时,就进行比较类型域,使用 == 比较基本类型域,使用 equals比较对象域,如果所有域都匹配,就返回true,否则返回false
代码如下:

	public boolean equals(Object otherObject)
	{
		//a quick test to see if the object are identical
		if (this == otherObject) return true;
		
		//must return the false if the explicit parameter is null
		if (otherObject == null) return false;
		
		//if the classes don't match, they can't be equal
		if (getClass() != otherObject.getClass()) return false;
		
		//now we know otherObject is a not-null Employee9
		Employee9 other = (Employee9) otherObject;
		
		//test whether the fields have identical values
		return Objects.equals(name, other.name) && salary == other.salary &&
				Objects.equals(hireDay, other.hireDay);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值