Java中==和equals()的区别
==和equals()最大的区别是:一个是运算符,一个是方法。
==:
【1】如果比较的对象是基本数据类型,则比较数值是否相等;
【2】如果比较的是引用数据类型,则比较的是对象的内存地址是否相等。
因为Java只有值传递,所以对于==来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。
equals():用来比较两个对象的内容是否相等。
equals()方法存在于Object类中,而Object类是所有类的直接或间接父类。
Object类equals()方法:
public boolean equals(Object obj) {return (this == obj);
}
equals()方法存在两种使用情况:
【1】类没有覆盖 equals()
方法 :
通过equals()
比较该类的两个对象时,等价于通过“==”比较这两个对象,使用的默认是 Object类equals()
方法。
Object类中equals方法源码:
public boolean equals(Object obj) {return (this == obj);
}
【2】类覆盖了 equals()
方法 :
一般我们都覆盖 equals()
方法来比较两个对象中的属性是否相等;若它们的属性相等,则返回 true(即,认为这两个对象相等)。
举个栗子:
public class EqualsDemo {public static void main(String[] args) {String a = new String("ab");String b = new String("ab");String aa = "ab";String bb = "ab";System.out.println("aa==bb: " + (aa == bb));System.out.println("a==b: " + (a == b));System.out.println("a.equals(b): " + (a.equals(b)));System.out.println("42 == 42.0 : " + (42 == 42.0));}
}
运行结果:
aa==bb: true
a==b: false
a.equals(b): true
42 == 42.0 : true
说明:
- String中的 equals方法是被重写过的,因为 Object的 equals方法是比较的对象的内存地址,而 String的 equals方法比较的是对象的值。
- 当创建 String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String对象。
String类中的equals方法源码:
public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
注意:
equals方法不能用于判断基本数据类型的变量,如只能用来判断两个对象是否相等。
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。
Java中==和equals()的区别相关推荐
- 面试必问一:Java 中 == 和 equals 的区别你知道吗
面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本 ...
- Java中==和equals的区别,新手必会!
==的作用: 基本类型:比较的就是值是否相等 引用类型:比较的就是地址值是否相同 equals的作用: 引用类型:默认情况下,比较的是地址值 特殊:String.Integer.Date这些类库中的e ...
- java中==和equals的区别
package com.atguigu.java1;import java.sql.Date;/** * equals()和==的区别* *一.回顾==的使用*==:运算符* 1.可以使用在基本数据类 ...
- JAVA中“==”与equals()方法区别
equals 方法是 java.lang.Object 类的方法 有两种用法说明: (1)对于字符串变量来说,使用"=="和"equals()"方法比较字符串时 ...
- Java中“==”和equals()的区别
有人经常弄不清楚"=="和equals()的区别在哪里,可以认真看下这篇文章,然后你亲自敲下代码,试试. java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型 ...
- java中== 和 .equals()的区别
在java中,我们用来比较两个数据类型是否一样的时候,通常会用到 == 和 .equals(),然而这两者有什么区别呢.下面我们通过一些例子来看一下. package test;public clas ...
- java中==与equals的区别及理解_Java开发中常量池的理解与归纳
相关概念 1.什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变! final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. 2.Class文件中的常量池 ...
- 面试基础整理(一)---Java中==和equals的区别
最近开始回头复习Java基础内容,在遇到==这个关系运算符和equals运算符时,发现了很多有趣的现象. 代码如下: //基本数据类型的比较int num1 = 10;int num2 = 10;Sy ...
- java中==与equals的区别
==是运算符,用于比较两个变量是否相等,对于基本类型而言比较的是变量的值,对于对象类型而言比较的是对象的地址. equals() 是Object类的方法,用于比较两个对象内容是否相等.默认Object ...
- Java 中==和 equals 的区别, equals 和 hashCode 的区别
==操作符用来比较两个基本类型变量时,比较的是值:用来比较引用类型变量时,比较的是引用的地址 equals方法是基类Object的方法,用于比较两个对象的内容是否相同,Object类中equals方法 ...
最新文章
- AIX系统日志学习笔记之一
- Linux中一切皆文件
- 将一个BYTE数组转换成16进制字符串和10进制字符串格式
- python序列切片
- 微信小程序开发之路(二)
- Python 标准库 - Pprint 模块 - 用于打印 Python 数据结构
- 三坐标测量圆直径_基于三坐标测量机的渐开线齿轮,测量方法
- LINUX下的流量监控shell脚本
- C++的学习(十)类和对象
- atitit.提升软件开发效率大的总结O5
- stm32无源蜂鸣器定时器_STM32与无源蜂鸣器
- gatk过滤_GATK使用方法详解(相关参数和参考文件说明)
- Inno Setup打包添加和去除管理员权限
- 3DMark2003 破 9000 !
- mailgun php版本,如何使用mailgun php API仅向bcc发送邮件?
- 使用pyautogui和inspect快速准确定位鼠标位置
- docker查看内部tcp长连接
- 【奥特曼迪迦表情包】
- 使用Foxmail设置Gmail以及Hotmail
- 基于JAVA的免费手机归属地接口查询
热门文章
- mybatis-plus 自定义UpdateWrapper(二)实现列的case set
- github webhook php,github 利用webhook配置代码自动发布
- 【Hoxton.SR1版本】Spring Cloud Gateway之GlobalFilter全局过滤器
- lambda表达式学习使用实例
- 多线程之使用读写锁ReentrantReadWriteLock实现缓存系统
- 一个计算机自动作图程序
- aix7.1安装12c执行root.sh无法启动ohasd服务案例
- Open***服务器端配置文件server.conf的说明
- 实验——基于文件验证和MYSQL验证的vsftpd虚拟用户
- 动态内存分配(c++)