AJPFX对equals()方法和==异同的比较
2024-08-22 20:33:52
equals()方法是Object类的方法,所有的类都集成了此方法,还有部分类重写了这个方法,我们看一下Object类中关于该方法的的源码:
- public boolean equals(Object obj) {
- return (this == obj);
- }
可以知道,凡事从Object中继承的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;
- }
该方法中,首先用==比较,如果两者地址值相同,就返回true,如果地址值不相同,再判断字符串内容是否相同,如果相同,返回值也是true,我们可以做一个实验:
- class equalsTest{
- public static void main(String[] args){
- String a = "abc";
- String b = "abc";
- String c = new String("abc");
- sop(a==b); //true
- sop(a.equals(b)); //true
- sop(a==c); //false
- sop(a.equals(c)); //true
- }
- public static void sop(Object o){
- System.out.println(o);
- }
- }
这个实验中,变量a和b底层默认启动的享元设计模式,指向的都是“abc”这个字符串对象,所以地址值相同,而语句new String("abc")底层创建的是两个对象,所以c的地址值和a,b不同,用==判断的结果为false,但是c指向的字符串内容与a是相同的,所以用equals()判断的结果为ture。
最新文章
- Expert 诊断优化系列-------------针对重点语句调索引
- 《利用python进行数据分析》读书笔记--第八章 绘图和可视化
- 去空格 whitespaceAndNewlineCharacterSet和过滤字符串
- 用 Swift 制作一个漂亮的汉堡按钮过渡动画
- CSDN首页>; 移动开发 直接拿来用!最火的Android开源项目(完结篇)
- php strtotime函数服务器和本地不相同
- C++_基础_类和对象
- 使用Docker官方的Django包【转】
- Android Screen Monitor使用
- iOS 之 NSUserDefault
- Hdu-2112 HDU Today (单源多点最短路——Dijsktra算法)
- Linux安装JDK完整步骤
- [CTF隐写]png中CRC检验错误的分析
- 自托管websocket和webapi部署云服务器域名及远程访问
- PHP客服聊天
- vector某元素是否存在、查找指定元素 、去重
- centos 7 安装sql 审核工具 inception + archer
- FZU oj 2277 Change 树状数组+dfs序
- [LeetCode&;Python] Problem 13. Roman to Integer
- DS二叉树--二叉树之父子结点