07.(java基础)面试题04 ==,equals区别
2015-12-24 14:55
531 查看
1. ==
java中的==是比较两个对象在JVM中的地址。比较好理解。看下面的代码:
上述代码中:
(1)s1 == s2为true,是因为s1和s2都是字符串字面值"nihao"的引用,指向同一块地址,所以相等。
(2)s1 == s3为false,是因为通过new产生的对象在堆中,s3是堆中变量的引用,而是s1是指向字符串字面值"nihao"的引用,地址不同所以不相等。
2.equals()(注意:equals底层调用的是==方法,然而String方法却特殊,先比较地址,若不相同在逐个比较字符串中的每一个字符)
equals是根类Obeject中的方法。源代码如下:
可见默认的equals方法,直接调用==,比较对象地址。
不同的子类,可以重写此方法,进行两个对象的equals的判断。
String类源码中重写的equals方法如下,
从上面的代码中可以看到,
(1)String类中的equals首先比较地址,如果是同一个对象的引用,可知对象相等,返回true。
(2)若果不是同一个对象,equals方法挨个比较两个字符串对象内的字符,只有完全相等才返回true,否则返回false
java中的==是比较两个对象在JVM中的地址。比较好理解。看下面的代码:
1 public class ComAddr{ 2 public static void main(String[] args) throws Exception { 3 String s1 = "nihao"; 4 String s2 = "nihao"; 5 String s3 = new String("nihao"); 6 System.out.println(s1 == s2); // true 7 System.out.println(s1 == s3); // false 8 } 9 }
上述代码中:
(1)s1 == s2为true,是因为s1和s2都是字符串字面值"nihao"的引用,指向同一块地址,所以相等。
(2)s1 == s3为false,是因为通过new产生的对象在堆中,s3是堆中变量的引用,而是s1是指向字符串字面值"nihao"的引用,地址不同所以不相等。
2.equals()(注意:equals底层调用的是==方法,然而String方法却特殊,先比较地址,若不相同在逐个比较字符串中的每一个字符)
equals是根类Obeject中的方法。源代码如下:
public boolean equals(Object obj) { return (this == obj); }
可见默认的equals方法,直接调用==,比较对象地址。
不同的子类,可以重写此方法,进行两个对象的equals的判断。
String类源码中重写的equals方法如下,
1 public boolean equals(Object anObject) { 2 if (this == anObject) { 3 return true; 4 } 5 if (anObject instanceof String) { 6 String anotherString = (String) anObject; 7 int n = value.length; 8 if (n == anotherString.value.length) { 9 char v1[] = value; 10 char v2[] = anotherString.value; 11 int i = 0; 12 while (n-- != 0) { 13 if (v1[i] != v2[i]) 14 return false; 15 i++; 16 } 17 return true; 18 } 19 } 20 return false; 21 }
从上面的代码中可以看到,
(1)String类中的equals首先比较地址,如果是同一个对象的引用,可知对象相等,返回true。
(2)若果不是同一个对象,equals方法挨个比较两个字符串对象内的字符,只有完全相等才返回true,否则返回false
相关文章推荐
- Sharepoint程序员应该了解的知识
- 常见面试算法之旋转打印矩阵
- SSh三大框架常考面试题
- 安卓面试题绝密宝典
- 安卓面试题绝密宝典
- 安卓面试题绝密宝典
- pyhton10min系列之程序员的浪漫-足迹生成器,有视频教程
- OC面试中,Block常出现的三个问题
- 谈谈面试与面试题
- 今天碰到一道比较有趣的面试题,大家来探讨一下。
- 面试时算法题的解答思路
- 答与微博前端教主在吃饭时讨论到的一道"微软面试题"
- 面试题4 将一个char数组中的所有空格替换成%20
- 神级码农的7项特征---是啥?
- 神级码农的7项特征---是啥?
- 常见面试算法之转圈打印矩阵
- 115个Java面试题及回答
- 笔试面试题总结(三)--- 软件开发
- 数据库面试题 Java 程序员 SQL 深入解析(一)
- 06.(java基础)面试题--03 abstract的用法,以及abstract和interface的异同