博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 中的equal和"=="
阅读量:7173 次
发布时间:2019-06-29

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

先看一段代码

String str1 = new String("str");String str2 = new String("str");System.out.println("==比较 :"+ (str1 == str2));System.out.println("equal比较:"+ str1.equals(str2));String str3 = "str1";String str4 = "str1";System.out.println("==比较 :"+ (str3 == str4));System.out.println("equal比较:"+ str3.equals(str4));
以上的输出结果有误,应该是falseequal比较:truetrueequal比较:true

根据打印的可以发现使用equal比较时无论是使用自动装箱来实例化还是用new来实例化,返回的都true,而用==则不一样了,自动装箱来实例化的返回的是true,而用new来

实例化的返回的确实false;先不急着解决为什么,先来了解下equals和==的区别,到时候就可以知道答案了

equals方法最初是在所有类的基类Object中进行定义的,源码是

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

可以看出这里定义的equals与==是等效的,但上面的怎么还会不一样呢?

原因就是String类对equals进行了重写:

public boolean equals(Object anObject) {    if (this == anObject) {        return true;    }    if (anObject instanceof String) {        String anotherString = (String)anObject;        int n = count;        if (n == anotherString.count) {        char v1[] = value;        char v2[] = anotherString.value;        int i = offset;        int j = anotherString.offset;        while (n-- != 0) {            if (v1[i++] != v2[j++])            return false;        }        return true;        }    }    return false;    }

可以看出,重写后的equal和之前发生了本质的区别,重写之前判断的是两个对象相等,重写之后是判断两个对象的值相等。

 

equals() 比较的是两个对象的值(内容)是否相同。

"==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。

  

转载地址:http://itbzm.baihongyu.com/

你可能感兴趣的文章
Mysq-MMM读写分离实操(简单易懂版)
查看>>
博文索引
查看>>
修改mysql用户密码
查看>>
Postgresql PostGIS使用总结
查看>>
Django中间件
查看>>
活动目录服务的配置与管理(7) 利用组策略实现文件夹重定向
查看>>
删除除了匹配到的所有文件以及文件夹
查看>>
Linux中安装GRUB的两种方式
查看>>
iptables 详解
查看>>
Rancher中的服务升级实验
查看>>
数据结构-------顺序表的实现
查看>>
供应虚拟机没有usb端口和无法识别映射usb解决方案
查看>>
sed的用法
查看>>
为什么我叫应届生
查看>>
安装虚拟机shell脚本
查看>>
去除数组中除第一个负数的所有负数
查看>>
哪些因素导致Python运行效率低?python入门编程
查看>>
[Python]第一个爬虫练习
查看>>
提高Python代码效率的方法
查看>>
zabbix使用msmtp&&mutt搭建邮件告警服务
查看>>