Java-“equals“ 与 “==“详解

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路Java-“equals“ 与 “==“详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习,欢迎关注!

上篇博文: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()==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体。

⭕ 像StringDateFile、包装类等都重写了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是比较值的错误观点。

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

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

3.2 代码演示

   int it = 65;
   float fl = 65.0f;
   System.out.println(6565.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()); //编译不通过

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156819.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!