zoukankan      html  css  js  c++  java
  • equlas和==的区别

    equlas和==的区别

    1. ==

    分为两种情况

    1.当两个值为基本数据类型时,此时比较的是两个数字的值。(byte、short、int、long、flout、double、char、boolen)

    2.当两个值为引用数据类型时,此时比较的为两个值所在的堆内存地址。(除非两个值为同一个new出来的对象,否则全为false,因为只要new就会开辟新的地址空间)--只要new就是false。

    2. equlas

    它只要作用于Object类,比较是否为同一个对象。

    1.如果没有对equlas方法进行重写,则比较的是两个值的对象地址。

    2.例如String、Date、Integer等方法对euqals进行重写之后,比较的是两个对象指向的内容。

    3.equals的源码
    public boolean equals(Object obj) {
        //this - s1
        //obj - s2
        return (this == obj);
    }
     

    方法默认是比较对象的内存地址,在一些类库中,方法被重写了,例如String、Date、Integer等。

    所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。

    4.String类的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;
        }
     
    练习

    题目:

    答案:

    结论:

     

  • 相关阅读:
    圣诞节快乐 | 圣诞特效来了!!
    前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例
    前端特效demo | 一起围观 10 种创意时钟
    即学即用,轻松搞定这些选择器!(下)
    架构师究竟要不要写代码?
    偷懒秘诀之变量篇
    弹幕,是怎样练成的?
    [C++]模板类和模板函数
    [C++]typedef用法
    [面试]CVTE 2019提前批 Windows应用开发一面
  • 原文地址:https://www.cnblogs.com/pansin/p/13991481.html
Copyright © 2011-2022 走看看