Java中==和equals的差异

初学Java不少人都会在==和equals这里出错 今天在这里写个博客 也但愿本身留个记忆
首先咱们先能探讨下==的意义 java

一.==web

==的做用在基本数据类型的变量上,比较的是两个变量的值是否相等
而做用于引用类型的变量,则比较的是所指向的对象的地址svg

而在Java有4类8种基本类型 分别是
浮点型:float(4 byte), double(8 byte)
整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)
字符型: char(2 byte)
布尔型: boolean3d

这里写图片描述
全部上图的运行结果是三个true xml

但或许有些人就有些不明白下面这代码为何仍是打印的true了
这里写图片描述
String是引用类型 因此这里的==是比较的它们的地址
能够这么理解:
这里把hello这个字符串赋给了str1,而这里的str1就指的就是hello这个字符串的地址
,而又把hello这个字符串又赋给了str2,而这里的str2就也指的就是hello这个字符串的地址
因此咱们str1,str2这两个字符串的地址其实就是同样的 因此获得的答案就是true
这里写图片描述
同理这个两个打印出来的也是两个true对象

或许又有些人不解下面这个 一样也是把str1和hello str2和hello绑定在一块儿了 为何打印出来的不是true
这里写图片描述
其实这里是经过new String(“hello”) 来产生一个对象(也称做为类String的一个实例),并将这个对象和str1进行绑定 此时str1是指向的这个对象的地址(不是值的地址)
,也就是说并非直接存储的字符串hello
同理str2也是 两个对象地址都是经过new出来的 指向的对象地址不一样 因此最后打印出来的答案不是true 是falseblog

而此时是这么写的话答案就是true,道理有简单 都让str2指向了str1指向的对象地址,那么获得的结果毫无疑问是true。
这里写图片描述图片

二.equals
为了知道equals方法怎么执行的 咱们须要去查看它的源码 而equals的源码在jdk下的这里写图片描述
java.lang.Object下面字符串

源码以下:
这里写图片描述源码

很显然,在Object类中,equals方法是用来比较两个对象的引用是否相等,便是否指向同一个对象。

可是有些朋友又会有疑问了,为何下面一段代码的输出结果是true?
这里写图片描述

要知道为何咱们能够去查看String类的equals方法的源码
这里写图片描述

能够看出String类是帮咱们重写了equals方法的 用来比较指向的字符串对象所存储的字符串是否相等。应该两个字符串对象所存储的字符串都是hello 因此最后打印的是true

而其余的一些类诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。

三.总结来讲 1.== 若是做用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 若是做用于引用类型的变量,则比较的是所指向的对象的地址 2.equals(equals方法不能做用于基本数据类型的变量) 若是没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址; 但像String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。