【Android一般进阶】引用数据类型euqals()与==作用相同
2015-05-11 16:14
267 查看
在面试中,经常会被问到euqals()与==有什么区别,估计很多人都会回答:前者是比较值,后者是比较内存地址,其实这只对了一般吧,我感觉。
首先==确实是比较对象的内存地址,这个毫无疑问,而euqals()呢?
其实euqals()是object类中的一个方法,查看源码:
原来euqals()也是做了==运行。是不是跟很多人想的不太一样呢?至少跟我原来想的不太一样。
而为什么会说euqals()是值比较呢?其实euqals()这个方法是可以被重写的,而String,Integer就重写了它。
先看看String 的euqals()是怎么样的,
再来看看Integer的euqals()
所以,得出结论如下:
1.在没有重写euqals()的情况下,==与euqals()得到的结果是一样的,都是内存地址比较。
2.在String,Integer类中,因为重写了euqals(),所以euqals()是值比较,而==依然是内存地址比较。
首先==确实是比较对象的内存地址,这个毫无疑问,而euqals()呢?
其实euqals()是object类中的一个方法,查看源码:
public boolean equals(Object o) { return this == o; }
原来euqals()也是做了==运行。是不是跟很多人想的不太一样呢?至少跟我原来想的不太一样。
而为什么会说euqals()是值比较呢?其实euqals()这个方法是可以被重写的,而String,Integer就重写了它。
先看看String 的euqals()是怎么样的,
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; }核心是每个字符作比较。
再来看看Integer的euqals()
@Override public boolean equals(Object o) { return (o instanceof Integer) && (((Integer) o).value == value); }核心也是值比较。
所以,得出结论如下:
1.在没有重写euqals()的情况下,==与euqals()得到的结果是一样的,都是内存地址比较。
2.在String,Integer类中,因为重写了euqals(),所以euqals()是值比较,而==依然是内存地址比较。
相关文章推荐
- Android错误引用自定义资源数据类型,造成安装解析产生未知错误
- 学习android JNI的那些事儿--------6. 在java中传入引用数据类型(对象)作为参数
- Android Intent的作用,哪些类型的数据可以被传递
- js引用对象和引用一般数据类型的注意点
- Android进阶——自定义Loader以一种更优美的方式异步加载不同类型的数据(二)
- Android进阶——Sharedpreferences保存对象和图片等复杂类型的数据
- Java值传递(基本数据类型和引用数据类型)和虚拟机内存作用
- java基本数据类型,String、Integer等类型,Class三种对象引用的箭头,即箭头是怎么指的?
- Java的引用数据类型(重要,面试)
- java语言基础(52)——java == 与 equals 比较引用类型时相同与区别
- java基本数据类型和引用类型
- Java基本数据类型、引用类对比及实际项目高级应用 使用==与equal的机制与不同
- ArcGIS Runtime SDK For Android 10.2.x版本支持的空间数据类型
- PHP自加和自减对于不同数据类型的作用与意义
- JS基本类型与引用类型的值与作用域
- 初识JavaScript中的基本数据类型和引用类型
- javascript学习笔记(一):基础、输出、注释、引用、变量、数据类型
- 03.java语言基础-参数的值传递机制-引用数据类型
- 6.13作业:数据类型及包的定义作用以及JAVA类的封装,表达式,标识符
- 基本数据类型、引用数据类型相互之间的比较规范(相等运算符的使用)