java中的equal()方法和==的区别

1.两者对比的原理

  这里所说的“==”是指对比两个对象是否相同的操作,即比对的是两个变量或实例是不是指向相同的引用(指针比较);

  equal()方法对比的则是两个变量会实例所指向内存中存储的值是否一致,即对比的相对应实例或对象的值是否相同;下面使用例子来说明一下。

在这里插入图片描述

        String s1 = new String("hehe");
        String s2 = s1;
        String s3 = new String("hehe");

        System.out.println(s1 == s3);
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s3));

输出:
在这里插入图片描述

  为了更好的说明,我们来查看一下equals的源码:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

2.扩展知识(值传递和引用传递)

  上面举得例子都是字符串的比较,下面举个整型的比较来简单描述一下,后面引出值传递和引用传递的区别。

  整型的比较很简单,就是直接使用==就可以了,不用那么麻烦搞个equals什么的比较。但是下面折腾一下来说明。

        int i1 = new Integer(1);
        int i2 = new Integer(1);
        System.out.println(i1 == i2);
        System.out.println(Objects.equals(i1, i2));

  上面代码的输出结果都是true,这是因为equal源码里面的定义也是直接调用==来比较的。这时可以看出,两者为什么会有这样区别,这时因为整型和字符串的赋值是不一样的。

2.1搞清楚基本类型和引用类型的不同之处

  num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。

        int num=10;
        String str="hello";

在这里插入图片描述

2.2搞清楚赋值运算符(=)的作用

  对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
  对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。

在这里插入图片描述
  如上图所示,“hello” 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值