java的==和equals的区别

一.(==)
1.基本数据类型:比较的是值是否相等,因为基本数据类型的值都存在栈内存,并且多个变量的值相同会共享一个栈值(可以理解为比较值的内存位置是否相等)
2.引用数据类型:比较的是栈中指向堆中对象的内存地址是否相等

二.(equals)
1.所有equals都继承Object的equals的方法,equals底层还是使用的==比较,
Object的equals方法:

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

2.
A.除了String,其他基本数据类型都不能调用方法,包括equals方法。
B.String是一个特殊的基本数据类型,可以调用String类的熟悉和方法,包括equals方法,String的equals方法重写了Object的equals方法,不在是==的比较,而是值的比较。
C.基本数据类型的包装类,除了String,使用的equals还是使用的底层==的比较,比较的是值是否相等(不使用new声明的包装类的值的存储和基本数据类型方式一样),如:
Integer a = 3
需要注意Integer a = 128的时候,存储方式使用引用类型的方式存储,此时equals比较的就是内存地址了:

1.Integer类型
Integer i1 = 3;
Integer i2 = 3;
此时i1 == i2 返回的是true
Integer i1 = 128;
Integer i2 = 128;
此时i1 == i2返回的是false,
这时因为Integer的数值在-128127之间时,即在int的范围内,默认是按照基本类型int来存放的,仍旧存在堆栈中,如果超出了int的范围,就按照对象的方式来存放和比较了。

D其他引用类型,只有没重写equals方法,使用equals还是使用的底层的==,比较的是内存地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值