Java全面细致讲解==和equals的使用

 更新时间:2022年05月30日 09:04:58   作者:小老师ir  
这篇文章主要介绍了Java中==和equals()的区别,,==可以使用在基本数据类型变量和引用数据类型变量中,equals()是方法,只能用于引用数据类型,需要的朋友可以参考下

上篇博文:Java-多线程的使用

equals与==

1. ==的使用

1.1 概述

⭕ 用于基本类型比较值时:只要两个变量的值相等,即为true。

⭕ 用于引用类型比较引用(是否指向同一个对象)时,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体,只有指向同一个对象时,==才返回true。

⭕ 用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错。

1.2 代码演示

演示一:

//基本数据类型
		int i = 10;
		int j = 10;
		double d = 10.0;
		System.out.println(i == j);//true
		System.out.println(i == d);//true
		char c = 10;
		System.out.println(i == c);//true
		char c1 = 'A';
		char c2 = 65;
		System.out.println(c1 == c2);//true

演示二:

   String str1 = new String("嘻嘻");
   String str2 = new String("嘻嘻");
   System.out.println(str1 == str2);//false

演示三:

		int i = 10;
		boolean b = true;
//		System.out.println(i == b); 
// 报错: Operator '==' cannot be applied to 'int', 'boolean'

2. equals的使用

2.1 概述

⭕ 是一个方法,而非运算符。

⭕ 只能适用于引用数据类型。

⭕ Object类中equals()的定义:

public boolean equals(Object obj) { return (this == obj); } 

说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体。

⭕ 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。

⭕ 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写,重写的原则:比较两个对象的实体内容是否相同。

2.2 代码演示

演示一:

    Person p1=new Person();
    Person p2=new Person();
    System.out.println(p1.equals(p2));//false
    //Person为自定义的类,没有对equals()进行重写
    String str1 = new String("小老师ir");
	String str2 = new String("小老师ir");
    System.out.println(str1.equals(str2));//true
    Date date1 = new Date(32432525324L);
	Date date2 = new Date(32432525324L);
	System.out.println(date1.equals(date2));//true

演示二:

public class Customer {	
	private String name;
	private int age;	
@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Customer other = (Customer) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}	
}

3. ==和equals的区别

3.1 概述

⭕ == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址。

⭕ equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals()方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。

⭕ 具体要看自定义类里有没有重写Object的equals()方法来判断。

⭕ 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。

3.2 代码演示

   int it = 65;
   float fl = 65.0f;
   System.out.println(“65和65.0f是否相等?” + (it == fl)); //true
   char ch1 = 'A'; 
   char ch2 = 12;
   System.out.println("65和'A'是否相等?" + (it == ch1));//true
   System.out.println(“12和ch2是否相等?" + (12 == ch2));//true
   String str1 = new String("hello");
   String str2 = new String("hello");
   System.out.println("str1和str2是否相等?"+ (str1 == str2));//false
   System.out.println("str1是否equals str2?"+(str1.equals(str2)));//true
   System.out.println(“hello” == new java.util.Date()); //编译不通过

到此这篇关于Java全面细致讲解==和equals的使用的文章就介绍到这了,更多相关Java ==和equals内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java自定义异常打印内容详解

    java自定义异常打印内容详解

    这篇文章主要为大家详细介绍了java自定义异常打印内容的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 汇总Java中List 去重的 6 种方法

    汇总Java中List 去重的 6 种方法

    这篇文章主要介绍了汇总Java中List 去重的 6 种方法,文章围绕主题展开List去重的方法,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Spring Boot如何动态创建Bean示例代码

    Spring Boot如何动态创建Bean示例代码

    这篇文章主要给大家介绍了关于Spring Boot如何动态创建Bean的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • Spring配置动态数据源实现读写分离的方法

    Spring配置动态数据源实现读写分离的方法

    这篇文章主要介绍了利用Spring配置动态数据源实现读写分离的方法,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,藕需要的朋友可以一起学习学习。
    2017-01-01
  • Java异常处理方法汇总

    Java异常处理方法汇总

    这篇文章主要介绍了Java异常处理方法汇总,我们在软件开发的过程中,任何语言的开发过程中都离不开异常处理。下面下小编加来给大家分享各种异常处理,希望对大家有所帮助,需要的朋友可以参考一下
    2021-12-12
  • 详解Spring MVC CORS 跨域

    详解Spring MVC CORS 跨域

    本篇文章主要介绍了详解Spring MVC CORS 跨域 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Spring配置中transactionAttributes的使用方法介绍

    Spring配置中transactionAttributes的使用方法介绍

    这篇文章主要介绍了Spring配置中transactionAttributes的使用方法介绍的相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • Java中的LinkedHashMap及LRU缓存机制详解

    Java中的LinkedHashMap及LRU缓存机制详解

    这篇文章主要介绍了Java中的LinkedHashMap及LRU缓存机制详解,LinkedHashMap继承自HashMap,它的多种操作都是建立在HashMap操作的基础上的,同HashMap不同的是,LinkedHashMap维护了一个Entry的双向链表,保证了插入的Entry中的顺序,需要的朋友可以参考下
    2023-09-09
  • SpringBoot之@Value获取application.properties配置无效的解决

    SpringBoot之@Value获取application.properties配置无效的解决

    这篇文章主要介绍了SpringBoot之@Value获取application.properties配置无效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 解析Java的Jackson库中对象的序列化与数据泛型绑定

    解析Java的Jackson库中对象的序列化与数据泛型绑定

    这篇文章主要介绍了解析Java的Jackson库中对象的序列化与数据泛型绑定,Jackson通常被用来实现Java对象和JSON数据的相互转换功能,需要的朋友可以参考下
    2016-01-01

最新评论