Java基础之判断方面学习

本文深入解析Java中对象比较的三种方式:==、equals和getClass,阐述它们的区别与应用场景,包括基础数据类型的比较、引用类型对象的内存地址和内容比较,以及自定义equals方法的重写技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Java比较存在那些方式呢?

   第一种:==,第二种:equals,第三种:getClass

 

2、他们之间有哪些差别呢?

第一种==:应用于基础数据类型比较,第二种equals:应用于引用数据类型比较,第三种getClass:应用于导入的是否同一个对象的实例化

注:以上是主要的比较应用方面

 

3、他们比较的方式到底是怎么样呢?

==和equals比较的话,如果equals没有重写的话,那么他们比较的差不多一致。

  注:  ==比较内存位置是否一致,,equals比较的是对象是否是同一个对象。

getClass比较的就是 class+包名+类名组成一个识别,比较。

 

4、getClass使用方面

附测试类:

package com.briup.ch22;

public class  GetClassTest
{
	public static void main(String[] args){
	     Student s1 = new Student();
		 Student s2 = new Student();
		 System.out.println("输出GetClass内容:"+s1.getClass()+" "+s2.getClass());
	}
}

class Student{
		public String name = "张三";
}

注输出结果:

 

5、==和equals比较使用方面

 ==     :一般比较内存位置是否一致的问题,比较针对于基础数据类型的话

equals:一般比较是否是同一个对象,(前提无重写equals)

附测试类:

package com.briup.ch22;

public class  GetClassTest
{
	public static void main(String[] args){
	     int a =1 , b =2 , c =3;
		 System.out.println(a == b);
		 System.out.println(b == c);
         Student s1 = new Student();
		 Student s2 = s1;
		 System.out.println(s1 == s2);
		 s2 = new Student();
         System.out.println(s1 == s2);
	}
}

class Student
{
	public String name;
	public int age;
	public String sex;
} 

 附测试类结果:

附equals测试类:

package com.briup.ch22;

public class  GetClassTest
{
	public static void main(String[] args){
         Student s1 = new Student();
		 Student s2 = s1;
		 System.out.println(s1.equals(s2));
		 s2 = new Student();
         System.out.println(s1.equals(s2));
	}
}

class Student
{
	public String name;
	public int age;
	public String sex;
} 

附测试类结果:

结果分析:==比较的是对于引用数据的时候比较的其实是内存地址是否一致,equals比较的同==

 

6、如何重写equals方法?

步骤:查询java的API,查询equals在那个里面,然后我们就可以重写该方法,实现自定义判断识别。

查询结果equals在默认包(lang),util包(Comparable接口),所以我们实现该接口或者重写该方法

附代码测试类:

package com.briup.ch22;

public class GetClassTest 
{
    static class  Student 
    {
	  public String name;
	  public int age;
	  public String sex;

	  public Student(String name,int age,String sex){
	      this.name = name;
		  this.age = age;
		  this.sex = sex;
	  }

	  public Student(){
	
	  }
	
	  @Override
	  public boolean equals(Object obj){
	      ///第一步判断是否为空对象
		  if(obj == null)
		  	return false;
		  ///第二步判断是否是同一个类是实例化对象
		  if(!obj.getClass().equals( this.getClass() ))
		  	return false;
		  Student temp = (Student)obj;
		  if(temp.name.equals(this.name) && temp.age == this.age && temp.sex.equals(this.sex))
			return true;
		  return false;
	  }
    }

	public static void main(String[] args){
         Student s1 = new Student("张三",20,"男");
		 Student s2 = s1;
         System.out.println(s1.equals(s2));
		 s2 = new Student("张三",20,"男");
		 System.out.println(s1.equals(s2));
		 s2.sex = "女";
         System.out.println(s1.equals(s2));
	}
}

附结构测试类:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值