equals和“==”的区别

本文详细介绍了Java中equals方法与==操作符的区别,特别是在引用类型和基本数据类型中的不同行为。在引用类型中,equals默认比较对象的引用,而数值包装类如Integer、String等重写了equals方法,用于比较对象内容。对于String,无论使用==还是equals,都比较字符串内容。Integer在-128到127范围内,==比较的是缓存的值,超出范围则比较对象地址。总结了equals与==在不同情况下的应用和比较原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

equals和“==”的区别

java中的8种数据类型(对应的数值包装类)

整型:byte(字节【Byte】)、short(短整型)【Short】、int(整型)【Integer】、long(长整型)【Long】

实数:float(单精度浮点数)【Float】、double(双精度浮点数)【Double】

字符类型:char【Character】

布尔类型:boolean【Bollean】

 

在引用类型中:

equals比较的是两个引用变量是否指向同一个对象,如果指向同一个对象返回true,否则false

“==”在比较引用类型是作用和equals一样也是对比空间地址


class People{
    int i;
}
public class equalsTest {
    public static void main(String [] args){
        People people1=new People();
        People people2=new People();
        System.out.println("people1==people2=?"+(people1==people2));
        System.out.println("people1.equals(people2)=?"+people1.equals(people2));
    }
}

但是Object的某些子类如String,数值包装类(Integer,Character等)、Date‘File,他们复写了Object类的这个方法,将其改为对比对象的内容,而不是空间地址。


public class equalsTest {
    public static void main(String [] args){
        Integer integer1=new Integer(22);
        Integer integer2=new Integer(22);
        System.out.println("integer1==integer2=?"+(integer1==integer2));
        System.out.println("integer1.equals(integer2)=?"+integer1.equals(integer2));
        String string1=new String("Good");
        String string2=new String("Good");
        System.out.println("string1==string2=?"+(string1==string2));
        System.out.println("string.equals(string2)=?"+string1.equals(string2));
    }
}

解析:integer1,integer2是两个不同的对象,“==”是比较两个对象的空间地址,所以integer1==integer的结果为false,integer1,integer2由于这两个对象的内容相同都是22,String,数值包装类(Integer,Character等)、Date‘File,他们复写了Object类的这个方法,将其改为对比对象的内容,而不是空间地址。所以结果为true。

在String中需要注意两点:

1.String是一个特殊的引用类型,对于两个字符串的比较,不管是“==”还是equals,这两者比较的都是字符串是否相等。


public class equalsTest {
    public static void main(String [] args){
       String str="aa";
       String str2="aa";
        System.out.println(str==str2);
        System.out.println(str.equals(str2));
    }
}

2.当你创建两个String对象时,内存中的地址是不一样的,你可以赋相同的值。


public class equalsTest {
    public static void main(String [] args){
       String str3=new String("aaa");
       String str4=new String("aaa");
        System.out.println(str3==str4);
        System.out.println(str3.equals(str4));
    }
}

Integer的比较


public class equalsTest {
    public static void main(String [] args){
       int i=2;
       int j=2;
        System.out.println(i==j);
       // System.out.println(i.equals(j));
        Integer a=1000;
        Integer b=1000;
        System.out.println(a==b);
        System.out.println(a.equals(b));
    }
}

在传入的参数是-128~127,直接用int原始数据类型,而超出这个范围,则new一个新的对象。所以==比较的是内存地址,返回false,equals比较的是对象的内容返回true

在基本数据类型中:

“==”比较的是属性的值

基本数据类型中不可以用equals来比较

总结:

在基本数据类型中:

“==”比较的是属性的值

基本数据类型中不可以用equals来比较

在引用数据类型中:

equals比较的是两个引用变量是否指向同一个对象,如果指向同一个对象返回true,否则false

“==”在比较引用类型是作用和equals一样也是对比空间地址

但是,Object的某些子类如String,数值包装类(Integer,Character等)、Date‘File,他们复写了Object类的这个方法,将其改为对比对象的内容,而不是空间地址。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值