zoukankan      html  css  js  c++  java
  • java .equals()和==的区别

    (1)比较基本数据类型

    对于8种基本数据类型的变量,变量直接存储的是“值”,因此在用关系操作符==来进行比较时,比较的就是 “值” 本身。

    (2)比较包装类

    public class Main {
        public static void main(String[] args) {
            Integer i1 = new Integer(1);
            Integer i2 = new Integer(1);
            System.out.println(i1 == i2);//false
            System.out.println(i1.equals(i2));//true
        }
    }

    这里"=="比较的是变量指向的内存地址,new产生的两个不同的对象所存放的地址是不一样的,这边的"equals"比较的就是内容,这里为什么比较的是内容,因为Integer重写了equals的方法。附上源码:

        public boolean equals(Object obj) {
            if (obj instanceof Integer) {
                return value == ((Integer) obj).intValue();
            }
            return false;
        }

    (3)比较String

    "=="比较的是内存地址,"equals"比较的是值,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;
        }

    (4)比较对象

    public class Main {
        public static void main(String[] args) {
            Test t1 = new Test();
            Test t2 = new Test();
            System.out.println(t1 == t2);//false
            System.out.println(t1.equals(t2));//false
        }
    }

    没有重写equals方法的类都是调用Object的equals方法:

        public boolean equals(Object obj) {
            return (this == obj);
        }
  • 相关阅读:
    标准化:释放物联网全部潜力的万能钥匙
    Linux系统中如何删除交换文件,来解决突然关闭命令行,导致文件无法打开的问题
    echarts设置图例以及网络格局的相关细节设置
    JSON.parse()与JSON.stringify()的区别,具体例子,一看就明白
    HttpServletRequest
    HttpServletResponse
    JavaWeb核心之Servlet
    Http协议和Tomcat服务器
    dom4j解析
    DTD和Schema约束
  • 原文地址:https://www.cnblogs.com/Alpharun/p/8974341.html
Copyright © 2011-2022 走看看