资讯专栏INFORMATION COLUMN

java基础之谈谈==和equals

Scorpion / 506人阅读

摘要:今天就来谈谈和的作用和区别。对于基础类型的作用就是判断值是否相等比如是是。就是重写了方法,所以出现了和结果不一致的情况。当然重写是有一定的标准的,如传递性,对称性等等,具体可以看源码要求不再一一展开。

判断对象是否相等是我们在项目中经常用到的,也是入门java必学的知识。今天就来谈谈==和equals的作用和区别。
1.==如何判断相等
先看一下一段代码:

        int i1 = 1;
        int i2 = 1;
        String s1 = new String("abc");
        String s2 = new String("abc");
        System.out.println(i1==i2);
        System.out.println(s1==s2);,

运行结果是true false,为什么一个是相等,而第二个是不等的。
1)对于基础类型(char、byte、short、int、long、float、double、boolean )==的作用就是判断值是否相等比如1.1==1.1是true,1=2是false。
2)对于对象来说,==的作用是判断对象的引用(对象的内存地址)是否一致。如果想判断对象的值是否一致,就需要用到equals。
2.equals的作用
先看一段代码:

    String s1 = new String("abc");
    String s2 = new String("abc");
    System.out.println(s1.equals(s2));
    System.out.println(s1==s2);

运行结果:true false,那么为什么equals和==的结果是不一样的?
equals是java.lang.Object中的方法,所有对象都是继承Objetct的,也就是所有对象都拥有equals方法。源码如下:

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

原始的实现很简单就是用了==,但是我们可以重写equals方法,达到我们想要的判断值的标准。String.class就是重写了equals方法,所以出现了==和equals结果不一致的情况。
String.class重写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个String对象是否一致。当然重写equals是有一定的标准的,如:传递性,对称性等等,具体可以看源码要求不再一一展开。
3.总结:
1).==用于基础数据类型时是判断值是否一致
用于对象时是判断对象的引用(所在的内存地址)是否一致
2)equals不可用于基础数据类型
默认也是使用==进行判断,但是可通过重写方法来定义自己的判断标准(重写equals方法时也需要重写hashcode方法)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67603.html

相关文章

  • Java基础面试题

    摘要:中和和的区别是运算符,用于比较两个变量是否相等。返回一个离散的型整数。在集合类操作中使用,为了提高查询速度。,等基本数据类型也称原始数据类型。如果两个对象根据方法比较是相等的,那么调用这两个对象中任意一个对象的方法都必须产生同样的整数结果。 java中==和equals和hashCode的区别 ==是运算符,用于比较两个变量是否相等。 equals,是Objec类的方法,用于比较两个...

    刘福 评论0 收藏0
  • 小马哥Java项目实战训练营 极客大学

    摘要:百度网盘提取码一面试题熟练掌握是很关键的,大公司不仅仅要求你会使用几个,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些有关的一些算法,设计模式等等。 ​​百度网盘​​提取码:u6C4 一、java面试题熟练掌握java是很关键的,大公司不仅仅要求你会使用几个api,更多的是要你熟悉源码实现原理,甚...

    不知名网友 评论0 收藏0
  • 金三银四,2019大厂Android高级工程师面试题整理

    摘要:原文地址游客前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。 最近整理了一波面试题,包括安卓JAVA方面的,目前大厂还是以安卓源码,算法,以及数据结构为主,有一些中小型公司也会问到混合开发的知识,至于我为什么倾向于混合开发,我的一句话就是走上编程之路,将来你要学不仅仅是这些,丰富自己方能与世接轨,做好全栈的装备。 原文地址:游客kutd...

    沈建明 评论0 收藏0
  • 金三银四,2019大厂Android高级工程师面试题整理

    摘要:原文地址游客前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。 最近整理了一波面试题,包括安卓JAVA方面的,目前大厂还是以安卓源码,算法,以及数据结构为主,有一些中小型公司也会问到混合开发的知识,至于我为什么倾向于混合开发,我的一句话就是走上编程之路,将来你要学不仅仅是这些,丰富自己方能与世接轨,做好全栈的装备。 原文地址:游客kutd...

    tracymac7 评论0 收藏0
  • 谈谈java中几种常见的散列算法及解决哈希碰撞的方式

    摘要:接下来分析几个常见的实现方式。再哈希法再哈希法,就是出现冲突后采用其他的哈希函数计算,直到不再冲突为止。,其中为不同的哈希函数。 由表及里,循序渐进,请往下看。随手点赞是对作者最大的鼓励!^0^。 什么是哈希表 引用:严蔚敏 《数据结构(C语言版)》中的内容 showImg(https://segmentfault.com/img/bVZlmE?w=800&h=364); 哈希表就是 ...

    沈建明 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<