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比较的是引用的对象的值。

  • 相关阅读:
    物联网相关期刊会议
    Java O O第十一天
    mac下安装伪分布hadoop2.6.0和hbase1.0.1.1
    Ubuntu下使用openssl为apache2配置ssl
    ubuntu下安装hadoop
    ubuntu 添加应用到Dash启动器
    Ubuntu12.04中安装Oracle JDK和NetBeans的方法
    Ubuntu12.04中在桌面建立指向网页的链接文件的方法
    Ubuntu12.04中Gvim无法固定到启动器的解决办法
    Ubuntu中apt-get安装或更新软件错误的解决办法
  • 原文地址:https://www.cnblogs.com/chiclee/p/5245720.html
Copyright © 2011-2022 走看看