Java中==号与equals()方法的区别

转载 2018年04月17日 12:40:02
==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 

首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:

int x = 10;
int y = 10;
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(x == y); // 输出true
System.out.println(str1 == str2); // 输出false

那equals()方法呢?我们可以通过查看源码知道,equals()方法存在于Object类中,因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值:


这里我自己定义了一个Student类,没有重写equals()方法,最后的输出结果是:false


在我重写了equals()方法后,输出结果变成了true。

现在一些基本的已经讲的差不多了,接下来我们回到第一个例子:


String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(s1.equals(s2));
System.out.println(s1 == s2);

根据上面所讲,第一个是true,第二个是false,确实如此,那继续看下面的例子:

String s1 = "abc";
String s2 = "abc";
System.out.println(s1.equals(s2));
System.out.println(s1 == s2);

这次的结果和上一个的是一样的吗?答案是:true true 
为什么第二个会是true呢? 
这就涉及到了内存中的常量池,常量池属于方法区的一部分,当运行到s1创建对象时,如果常量池中没有,就在常量池中创建一个对象”abc”,第二次创建的时候,就直接使用,所以两次创建的对象其实是同一个对象,它们的地址值相等。

那上一个例子中的

String str1 = new String("abc");
是怎么回事呢? 
这里其实创建了两次对象,依次是在常量池中创建了对象”abc”,一次是在堆内存中创建了对象str1,所以str1和str2的地址值不相等。

Java中“==”与equals()的区别

对于关系操作符“==”,《Java编程思想》中是这样描述的:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。这里的操作数的“值”值得我们注意。对于8种基本数据类型(bo...
  • xiangwanpeng
  • xiangwanpeng
  • 2016-10-17 22:04:14
  • 434

简单明了理解java中的“==”和“equals”的区别

在java中,首先我们理解基本数据类型和引用数据类型。 所谓基本数据类型,就是数据的值直接存储在内存的栈空间,不存在“引用”的概念,有8种基本数据类型,byte(1个字节),boolean(1个字节)...
  • oShuangLengChangHe12
  • oShuangLengChangHe12
  • 2017-10-29 16:30:57
  • 260

java中关于“==”和“equals()”方法的区别

我们想要说清楚java中“==”操作符 和 “equals()”方法的区别,就先来单独谈谈,当我们把它俩分别说清楚了,区别自然就出来了。 1、“==”操作符       “==”是操作符,专门...
  • u011159417
  • u011159417
  • 2017-08-18 12:06:27
  • 75

java中 equals()方法 与 “==”的区别

摘要java语言的 equals() 方法 与 “==” 的区别,是每个初学者都会遇到过的问题。之前自己也很清楚,可日子一长,又渐渐遗忘,于是整理出一篇博客,复习一下。...
  • echosilly
  • echosilly
  • 2016-06-26 18:04:32
  • 4229

Java 中 Equals和==的区别

在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的问题。 在JVM中 内存分为栈内存和堆内存。二者有什么区别呢? 当我们创建一个对象(new Object)时,就会调用它的构造函数...
  • tcytcy123
  • tcytcy123
  • 2016-03-09 16:19:38
  • 21946

java中equals和等号(==)的区别

java中的数据类型,可分为两类: 1,基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==)...
  • qiuyang0607
  • qiuyang0607
  • 2016-11-06 06:22:42
  • 3532

java中equals和==的区别.doc

  • 2011年06月02日 09:49
  • 42KB
  • 下载

彻底弄懂Java中的equals()方法以及与"=="的区别

一、问题描述: 今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差。所以,我决定花费时间把equals()和“==”的功能彻底弄懂,前事不忘后事之师...
  • G_66_hero
  • G_66_hero
  • 2017-05-02 15:05:04
  • 1816

Java Object类中equals()方法与String类中equals()方法的比较

public class AccountTester2 { public static void main(String[] args) { BankAccount2 b1 = new Bank...
  • zhazhabin
  • zhazhabin
  • 2016-02-29 21:41:06
  • 1122

Java中equals()、==、compareTo()的区别

== equals compareTo()
  • u012369153
  • u012369153
  • 2016-10-31 14:17:47
  • 1596
收藏助手
不良信息举报
您举报文章:Java中==号与equals()方法的区别
举报原因:
原因补充:

(最多只允许输入30个字)