zoukankan      html  css  js  c++  java
  • java中equals和==的区别详解

    java中的数据类型,可分为两类:

    1.基本数据类型。

    byte,short,char,int,long,float,double,boolean这八大原始数据类型他们之间的比较,使用“==”,比较的是他们的值。

    2.符合数据类型

    符合数据类型,用“==”比较时候,比较的是它们在内存中的存放地址。java中所以的类都是继承于Object这个基类的,Object中有个equals()方法,这个方法比较也是对象的内存地址,但是继承自它的子类都重新了equals方法,所以很多类的equals()比较的不再是堆内存中的存放地址了。

    2.1 String的equals()方法

    String类的equals方法使用的比较多,我们以String类为例。

    public class TestString {
        public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "abc";
            String s3 = new String("abc");
            if (s1 == s2) {
                System.out.println("s1 == s2");
            } else {
                System.out.println("s1 != s2");
            }
            if (s1.equals(s3)) {
                System.out.println("s1 equals s3");
            }else {
                System.out.println("s1 not equals s3");
            }
        }
    }

    输出:

    s1 == s2
    s1 equals s3

    2.2 JDK源码equals()

    2.2.1 Object的equals()方法

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

    可以看出来,Object的equals方法就是比较内存地址,正是由于一些子类重写了equals方法,才会有了 equals和==的区别。换句话说,我们自定义的类,如果没有重写equals方法,那么久默认equals比较的是内存地址。

    2.2.2 String重写了父类Object的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;
        }

    从这段源码可以看出来,Sting类型的equals比较的是引用的对象的值。

  • 相关阅读:
    1144 The Missing Number (20分)
    1145 Hashing
    1146 Topological Order (25分)
    1147 Heaps (30分)
    1148 Werewolf
    1149 Dangerous Goods Packaging (25分)
    TypeReference
    Supervisor安装与配置()二
    谷粒商城ES调用(十九)
    Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
  • 原文地址:https://www.cnblogs.com/chiclee/p/5245720.html
Copyright © 2011-2022 走看看