java ----Equals 与 ==

简介: Equals 与 ==

.先来说说Java的基本数据类型和引用类型

 

八大基本数据类型:Byteshortintlongdoublefolatbooleanchar,其中占一个字节的是byteshortchar占两个字节,intfloat占四个字节,doublelong8个字节,boolean只有truefalse,这八种数据变量中直接存储值

 

八大基本数据类型对应着各自的封装类型,提供了更多的方法,且不进行初始化时值默认为空(基本数据类型必须初始化)

 

String类型属于引用类型,变量中存储的是地址,对应的地址存储数据

 

.equals==

 

equals是判断两个变量或者实例指向同一个内存空间的值是不是相同

 

==是判断两个变量或者实例是不是指向同一个内存空间

 

举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个

==计较的时候,两者的类型需要一致!

 

比如下面的代码

 

public class EqualsTest {

   public static void main(String[] args) {

       // TODO Auto-generated method stub

       Integer aaa=new Integer(5);

       Integer bbb=new Integer(5);

     

       int a=10;

       int b=10;

       String str1=new String("justice");

       String str2=new String("justice");

       String str3;

       str3=str1;

     

     

       System.out.println(aaa==bbb);

       System.out.println(aaa.equals(bbb));

       System.out.println(a==b);

     

       System.out.println(str1==str2);

       System.out.println(str1.equals(str2));

     

     

       System.out.println(str1==str3);

       System.out.println(str1.equals(str3));

   }

 

}

 

 

对应结果如下

 

image.png

 

 

aaabbb都是Integer封装类型,是不同的对象,变量存储地址, 所以==结果为falseequalstrue

 

ab都是基本数据类型,变量存储值,所以==true,基本数据类型无equals方法(没有意义)

 

str1str2都是String类型,属于引用类型,变量存储地址,所以==falseequalstrue

 

创建str3的时候,str3指向了str1,所以str1str3的指向同一个地址,存储的数据自然相同,所以均为true

 

.接下来看个有意思的事情(有点神奇)

 

看图思考一下结果是什么???

 

image.png

 

 

结果。。。。。。。。。。。。。。。。。。。。。。。。

 

image.png

 

 

说下原因,之所以会有疑问,是大家觉得ac是不同的对象,所以地址不同,所以结果为false才对,但是定义一个Integer变量时,会默认进行Integer.valueOfa)操作,看一下这个方法的源码(按住ctrl+鼠标左键进入该方法),

image.jpeg

 

 

 

high的值为127low的值为-128,当进行这个方法时如果值在-128-127之间,返回的值也就是地址是相同的,所以ac的地址相同,a==c自然为true

 

原文链接:https://blog.csdn.net/qq_38162448/article/details/81611894

目录
相关文章
|
1月前
|
Java
java equals和==
==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法 public boolean equals(0bjectobj):参数可以是任何对象,只有参数是一个字符串并且内 容相同的才会给true;否则返回false 注意事项: 1.任何对象都能用object进行接收。 2.equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。 3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面。 推荐:"abc".equals(str) 不推荐:str.equals("abc") public boolean egualsIgnoreCas
10 1
|
1月前
|
Java
Java中常见需要重写equals方法的类
Java中常见需要重写equals方法的类
|
3月前
|
Java
Java中 ==与equals的区别
Java中 ==与equals的区别
17 1
|
4月前
|
Java
JAVA中比较对象是否相等的方式是什么?为什么重写equals就一定要重写hashcode?百天百题(3/100)
JAVA中比较对象是否相等的方式是什么?为什么重写equals就一定要重写hashcode?
|
4月前
|
存储 算法 Java
史上最全的Java容器集合之equals 和 hashCode
史上最全的Java容器集合之equals 和 hashCode
37 0
|
5月前
|
Java
在Java语言中,==、equals 和 equalsIgnoreCase 是用于比较对象或值的三个不同的方法。
在Java语言中,==、equals 和 equalsIgnoreCase 是用于比较对象或值的三个不同的方法。
|
6月前
|
Java
【Java用法】Java 语言规范要求 equals 方法具有的特性
【Java用法】Java 语言规范要求 equals 方法具有的特性
36 0
|
7月前
|
存储 算法 Java
Java 中的 == 运算符、equals 方法和 hashCode 方法
HashMap 中键是不可以重复的,因此它的键就必须是不同的对象,那么这个时候就先用计算速度快的 hashCode 进行比较,若哈希值都不相等,那么这两个对象必然不相等,若是相等的,那么这个就有两种可能出现,一种情况是这两个对象是真的相等,另外一种情况就是出现了罕见的“哈希冲突”现象,那么这个时候就轮到 equals 来进行判断了!在 HashMap 中,键是不可以重复的,也就是说,它们的键都是不相同的,因此就要判断不同对象是否为同一对象。因此,哈希值可以用于判断两个对象是否不等。
70 1
|
8月前
|
Java
Java面向对象中 Object类的详解和其中的equals()和toString()方法的详解
Java面向对象中 Object类的详解和其中的equals()和toString()方法的详解
39 0