JavaSE(十九)——equals() 和 == 的区别

1. 不同数据类型中 == 的含义

基本数据类型(原始数据类型) :byte,short,char,int,long,float,double,boolean。
在这些数据类型中,当他们用(==)进行比较的时候,比较的是他们的值是否相等。

复合数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)是否相同。

注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果均为false。因为每new一次,都会重新开辟堆内存空间。

2. equals()方法

(1)Java中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址。
(2)由于在一些类库中equals方法被重写了,如String、Integer、Date。在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了,用来比较的是两个对象的内容是否相等,。
(3)因此,对于复合数据类型之间进行equals比较,在没有重写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被重写,按照重写的要求来。

面试题:请解释字符串比较之中“==”和equals()的区别?
==:比较的是两个字符串内存地址的数值是否相等,属于数值比较;
equals():比较的是两个字符串的内容,属于内容比较。
以后进行字符串相等判断的时候都使用equals()。

面试题:两个对象值相同(x.equals(y) == true),但却可有不同的 hash code 说法 是否正确?
不对。Java 对于 eqauls 方法和 hashCode 方法是这样规定的:
(1)如果两个对象相同(equals 方法返回 true),那么它们的 hashCode 值一定要相同;
(2)如果两个对象的 hashCode 相同,它们并不一定相同。
(3)重载 hashCode()是为了对同一个 key,能得到 相同的 Hash Code(内存地址),这样 HashMap 就可以定位到我们指定的 key 上。重载 equals()是为了向 HashMap 表明当前对象和 key 上所保存的对象是相等的。

3. 举例验证

:String str=“abc"是一种非常特殊的形式,和new 有本质的区别。它是java中唯一不需要new 就可以产生对象的途径。
String str = “abc”; 先在内存中找是不是有"abc"这个对象,如果有,就让str指向那个"abc”.如果内存里没有"abc",就创建一个新的对象保存"abc"。
String str=new String (“abc”) 就是不管内存里是不是已经有"abc"这个对象,都新建一个对象保存"abc"。
String类中重写了equals()方法。

public class demo01 {
    public static void main(String[] args) {
        String a = new String("abc");  //a为一个引用
        String b = new String("abc");  //b为另一个引用,对象的内容一样
        String aa="abc";  //放在常量池中
        String bb="abc";  //从常量池中查找
        System.out.println(a==b);          //false,地址不一样
        System.out.println(aa==bb);        //true,地址一样
        System.out.println(a.equals(b));   //true,值一样
        System.out.println(aa.equals(bb)); //true,值一样

        System.out.println(22==22);        //true
        System.out.println(22==22.0);      //true
    } 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值