欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-23 11:54:44
...

1. 基本数据类型和引用数据类型
八大基本数据类型:byte、short、int、long、、char、boolean、float、double,八种基本数据类型都有相对相应的包装类,类中包含各操作方法,在不进行初始化时,值为空。
引用数据类型:类,接口类型,数组类型等。
特殊的引用数据类型:String、Date、文件类、包装类等

2. ==与equals
在使用 == 时,判断两边的是否相等,根据数据类型的不同可以分为以下两种类型:
1.基本数据类型:根据基本数据类型的值判断是否相等,注意事基本数据类型的值,两端数据类型可以不一样,12==12.0F 是true
2. 引用数据类型:比较引用对象的地址值是否相等
equals()方法是Object类中的一个方法,Object是Java中任意类的父类,Object类中的equals()比较类对象的地址值是否相同,其源码如下:

  public boolean equals(Object obj) {
        return this == obj;
    }

由源码的方法现实可以看出,Object类型的equals()与==在一般的引用数据类型比较是是一样的。但是对于特殊的引用数据类型,Java在其实现类中重写了equals()比较的不是两个对象的地址值是否相等,而是比较两个对象的属性内容是否完全相等。如:

        Object object1 = new Object();
        Object object2 = new Object();
        System.out.println("一般引用数据类型:"+object1.equals(object2));
        Integer integer1 = new Integer(12);
        Integer integer2 = new Integer(12);
        System.out.println("基本数据包装类:"+integer1.equals(integer2));;

其结果是:

一般引用数据类型:false
基本数据包装类:true
  1. 关于基本数据类型与其包装类==与equals()的使用
    详细代码:
       int i1 = 127;
       float f1 = 127f;
       Integer i2 = new Integer(127);
       Integer i3 = new Integer(127);
       Integer i4 = Integer.valueOf(127);
       Integer i5 = Integer.valueOf(127);
       Integer i6 = Integer.valueOf(128);
       Integer i7 = Integer.valueOf(128);

       System.out.println(i1 == f1);//判断值相等,true
       System.out.println(i1 == i2);//i2 创建了新对象,true
       System.out.println(i1 == i4);// valueOf 也是创建了一个新对象,true

       System.out.println(i2.equals(i3));//true 重写equals方法,比较值相等
       System.out.println(i2==i3);//false 比较内存地址相等

       System.out.println(i2.equals(i4)); //true,比较值相等
       System.out.println(i2==i4);// true,Integer数据类型的缓存机制(Catch),范围是-128~127

       System.out.println(i4==i5);// true
       System.out.println(i6==i7);//flase

其结果:

true
true
true
true
false
true
false
true
false

基本数据类型的包装类由于使用频繁,Byte、Short、Integer、Long、Character、Boolean设有缓存机制,其中Byte、Short、Integer、Long、Character都是-128~127范围设置缓存机制。
Java中==与equals()方法的区别
如Integer在执行valueOf的时候,会先去检查内存中是否存在该数字,如果存在的话,就直接从内存中取出返回,如果不存在的话,就新建一个Integer对象。如i4与i5的地址是811,i6与i7则是因为数值是128不在缓存内,都是重新创建的因此地址不同。

相关标签: java