博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中equals和==的区别详解
阅读量:4983 次
发布时间:2019-06-12

本文共 1773 字,大约阅读时间需要 5 分钟。

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

转载于:https://www.cnblogs.com/chiclee/p/5245720.html

你可能感兴趣的文章
【转】Android 组件系列-----Activity保存状态
查看>>
批处理实现多线程执行命令列表文件
查看>>
light oj 1151 - Snakes and Ladders 高斯消元+概率DP
查看>>
SVG的简单介绍
查看>>
快速排序算法总结
查看>>
Sublime Text编辑远程Linux服务器上的文件
查看>>
服务器文件同步
查看>>
HDU-4283 You Are the One 区间DP
查看>>
RPG MAKER MV 打包APK教程(一键打包,无需编写任何代码)
查看>>
Asp.Net Web API 2第四课——HttpClient消息处理器
查看>>
3. 无重复字符的最长子串
查看>>
week3xml
查看>>
MFC 多线程
查看>>
Codeforces Round #402 (Div. 2) 阵亡记
查看>>
Ceph源码解析:Scrub故障检测
查看>>
LUOGU P1414 又是毕业季II
查看>>
BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)
查看>>
FastDFS 自动部署和配置脚本
查看>>
有道面试
查看>>
跟牛牛老师学习python自动化的第六天
查看>>