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

目录
  • equals与==
    • 1. ==的使用
      • 1.1 概述
      • 1.2 代码演示
    • 2. equals的使用
      • 2.1 概述
      • 2.2 代码演示
    • 3. ==和equals的区别
      • 3.1 概述
      • 3.2 代码演示

上篇博文: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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何区分JAVA中的equals与==

    java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boolean  他们之间的比较,应用双等号(==),比较的是他们的值. 基本数据类型比较 == 和 Equals 两者都是比较值:equals()与==都是java中用于进行比较的,返回boolean值,不同的是equals()是Object类中定义的一个方法,==是一个比较运算符.下面是equals()在Object中的源码: public b

  • Java初学者了解"=="与equals的区别

    这篇文章主要介绍了Java初学者了解"=="与equals的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.基本数据类型当中,"=="比较的是两个变量的值 int a=5; int b=4; int c=5; System.out.println(a==b);//false System.out.println(a==c);//true 2.引用数据类型当中,"=="比较的是两个对象在内

  • Java中equals和==的区别详解

    目录 1.java中的数据类型,可分为两类: 2.再稍微改动一下程序,会有更奇怪的发现: 3. 字符串缓冲池 4.再次更改程序: 总结 1.java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的

  • Java详细解析==和equals的区别

    目录 1.== 解析 2.equals 方法解析 3.equals方法具有以下特性 1.== 解析 == 常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较: 如果 == 比较的是基本数据类型,那么比较的是两个基本数据类型的值是否相等: 如果 == 是比较的两个对象,那么比较的是两个对象的引用,那么就是比较两个对象的引用是否相等,也就是判断两个对象是否指向了同一块内存区域: 2.equals 方法解析 equals 方法主要用于两个对象之间,检测一个对象是否等于另一个对象. 我

  • 详解Java中==和equals()的区别

    目录 1. == 1.1 基本数据类型 1.2 引用数据类型 1.3 小结 2. equals 3. 总结 1. == == 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用数据类型变量中 1.1 基本数据类型 Java基本数据类型共有八种,可以分为三类 字符类型char 布尔类型boolean 数值类型byte.short.int.long.float.double 这里有个例外,boolean不参与数值运算 int a1 = 10; int a2 = 10; Syste

  • 浅谈java字符串比较到底应该用==还是equals

    当用new String("aaaa")对字符串做定义时,==会返回false,equals可以返回正常结果. 比如 System.out.println("a" == "a"); //true System.out.println("a".equals("a")); //true System.out.println("a".equals(new String("a"

  • java中“==“和equals()的区别详解

    今天我们探讨一下Java中"=="与equals()的区别 ==:关系运算符 在基本数据类型中比较两个值的内容是否相等       在引用类型型中比较的是两个对象的地址是否相等 equals()是Object类中的方法 1.基本数据类型无法使用equals()方法 2.在引用类型中若是没有重写Object类时,则默认使用Object类的equals方法,则仍然 利用"=="比较两个对象的内存地址,若是重写Object类的equals方法,则调用子类重写后    的方

  • java中如何区分==和equals

    网上搜了一遍,对于==和equals的表达感觉不全面:总感觉缺点什么:今天把这个比较总结出来三条规律. 结论1.基本类型没有equals方法,只有==比较,比较的是值. 结论2.所有对象的==比较都是内存地址的比较 (上面的两点简单不介绍了) 首先我们看Integer类的比较. Integer a=1000; Integer b=1000; System.out.println(a == b);//false System.out.println(a.equals(b));//true 因为a和

  • java基础之 “==”与“equals”区别详解

    对于初学java的人来说,在面对数值比较的时候,我们大多数会采用 "=="的方式来进行比较,但是java中给我们提供了equals()方法,这时候很多人就会忽略这两种方式的区别,在学习中产生了很多错误,本文将详细区分equals和 == 两种方式的区别. "==" 解读 对于基本类型和引用类型,==的作用效果是不同的,对于 基本类型 来说,比较的是值是否相同,对于 引用类型 来说,比较的是引用是否相同. 代码示例: public static void main(S

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

    目录 equals与== 1. ==的使用 1.1 概述 1.2 代码演示 2. equals的使用 2.1 概述 2.2 代码演示 3. ==和equals的区别 3.1 概述 3.2 代码演示 上篇博文:Java-多线程的使用 equals与== 1. ==的使用 1.1 概述 用于基本类型比较值时:只要两个变量的值相等,即为true. 用于引用类型比较引用(是否指向同一个对象)时,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体,只有指向同一个对象时,==才返回true. 用

  • Java全面细致讲解Cookie与Session及kaptcha验证码的使用

    目录 Cookie 1. 概念 2. 创建Cookie 3. 服务器获取Cookie 4. Cookie的修改 5. Cookie的生命控制 6. Cookie的有效路径Path 7. Cookie应用-免用户名密码登录 Session 1. 概念 2. 创建和获取Session 3. Session域数据的存取 4. Session的生命周期的控制 5. 浏览器和Session的关联 kaptcha验证码 1. 使用 2. 验证码的切换 Cookie 1. 概念 是服务器通知客户端保存键值对的

  • Java全面细致讲解类与对象

    目录 类和对象的关系 类和对象的实例化 static关键字 private实现的封装 构造方法 this关键字 代码块 匿名对象 小结 类和对象的关系 类就是一类对象的统称.对象就是这一类具体化的一个实例. (对象是类的实例化) 对象是什么? 此对象非彼对象!!!说到对象就要提到过程. 面向过程:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题.面向过程注重的是过程,在整个过程中所涉及的行为,就是功能. 面向对象:JAVA是基于面向对象的,关注的是对象,将一件事情

  • Java全面细致讲解final的使用

    目录 一.理解 二.作用 1. 修饰-类 2. 修饰-方法 3. 修饰-变量 3.1 修饰-成员变量(属性) 3.2 修饰-局部变量 三.经典题目 一.理解 final:最终的 二.作用 final 可以用来修饰的结构:类.方法.变量 1. 修饰-类 final 用来修饰一个类,表示此类不能被其它类所继承,提高安全性,提高程序的可读性. 比如:String类.System类.StringBuffer类… 代码演示: final class A{}class B extends A{ //错误,不

  • Java全面细致讲解Wrapper的使用

    目录 一.概述 二.作用 三.使用 1. 基本数据类型-包装类的实例(装箱) 2. 包装类-基本数据类型(拆箱) 3. String-基本数据类型/包装类 4. 基本数据类型/包装类-String 5. 转换图 四.经典题目 一.概述 针对八种基本数据类型定义相应的引用类型—包装类(封装类). 二.作用 有了类的特点,就可以调用类中的方法,Java才是真正的面向对象. 八种基本数据类型与其包装类的对应关系: 基本数据类型 包装类 byte Byte short Short int Integer

  • Java超详细讲解设计模式之一的工厂模式

    目录 工厂模式 1.简单工厂 1.1结构 1.2实现 1.3优缺点 1.4扩展 2.工厂方法 2.1结构 2.2实现 2.3优缺点 3.抽象工厂 3.1结构 3.2实现 3.3优缺点 4.模式扩展 4.1实现 工厂模式 在Java应用程序中对象无处不在,这些对象都需要进行创建,如果创建的时候直接new对象,那么如果我们要更换对象,所有new对象的地方都需要进行更改.违背了软件设计原则中的开闭原则.如果我们使用工厂生产对象,只需要在工厂中关注对象的改变即可,达到了与对象解耦的目的,工厂模式最大的特

  • Java 超详细讲解抽象类与接口的使用

    目录 一.抽象类 1.抽象类的语法 2.抽象类的特性 3.抽象类的作用 二.接口 1.接口的概念 2.接口使用 3.接口特性 4.实现多个接口 5.接口间的继承 6.常用的接口 (1)Comparable接口 (2)Cloneable接口 三.Object类 一.抽象类 在Java中,如果一个类被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法不用给出方法体. 1.抽象类的语法 //抽象类:被abstract修饰的类 public abstract cl

  • Java 超详细讲解异常的处理

    目录 1.异常的概念和体系结构 1.1异常的概念 1.2异常的体系结构及分类 2.异常的处理 2.1防御式编程 2.2异常地抛出 2.3异常的捕获 (1)异常声明throws (2)try-catch捕获并处理 (3)finally 2.4异常的处理流程 3.自定义异常类 1.异常的概念和体系结构 1.1异常的概念 Java中,在程序执行过程中发生的不正常行为称为异常.比如之前一直遇到的: (1)算数异常 System.out.prinntln(10/0); (2)数组越界异常 int[] ar

  • Java 超基础讲解String的使用

    目录 1.String概述 2.特点 3.String构造方法 4.String对象的特点 5.字符串的比较 6.实现用户登录 四.总结 1.String概述 String类在java.lang包下,所以使用的时候不需要导包. String类代表字符串,Java程序中的所有字符串文字(如:"abc")都被实现为此类的实例. 2.特点 字符串不可变,他们的值创建后不能被更改 虽然String的值是不可变的,但是它们可以被共享 字符串效果上相当于字符数组(char[ ] ),但是底层原理是

  • Java 超详细讲解hashCode方法

    目录 1.介绍一下hashCode方法 2.为什么需要hashCode方法? 3.hashCode(),equals()两种方法是什么关系? 4.为什么重写 equals 方法必须重写 hashcode 方法 ? 1.介绍一下hashCode方法 hashCode() 的作用是获取哈希码,也称为散列码,它实际上是返回一个int整数.这个哈希码的作用是确定该对象在哈希表中的索引位置. hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有 hashCo

随机推荐