• 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);
        }
  • 相关阅读:
    谷歌分析配置行为事件
    CentOS7.6下模拟iSCSI,Windows来连
    2.CentOS6.5下的DNS主从区域传送配置
    1.CentOS6.5下的基础DNS配置
    CentOS下搭建DHCP服务
    思科设备配置DHCP服务
    思科网络设备配置AAA认证
    vsftpd文件虚拟用户搭建
    Windows网络服务渗透攻击分类
    使用脚本来监控新建进程及其父进程以及他们的命令行
  • 原文地址:https://www.cnblogs.com/Alpharun/p/8974341.html
Copyright © 2020-2023  润新知