Object 和 String 的equals比较
来源:互联网 发布:java创建二叉树 编辑:程序博客网 时间:2024/05/11 22:51
先看一段String 和 一个普通类的equals方法的比较
/** * Object 中的equlas的使用 * @author dell * */public class TestEquals { public static void main(String [] args){ /** ================== String中有重写的equals===========================*/ String str1 = new String("123"); String str2 = new String("123"); System.out.println(str1.equals(str2)); //out:true System.out.println(str1.equals(str1)); //out:true /**==================== Dog中没有重写equals ========================= */ //dog1 与 dog2 的变量值相同 Dog dog1 = new Dog("dog"); Dog dog2 = new Dog("dog"); System.out.println(dog1.equals(dog2)); //out:false //dog1与dog2的变量引用相同 dog1.name = dog2.name; System.out.println(dog1.equals(dog2)); //out:false //dog1与dog2的引用相同 dog1 = dog2; System.out.println(dog1.equals(dog2)); //out:true /**==================== Cat中重写equals,比较Cat中name属性 ========================= */ Cat cat1 = new Cat("cat"); Cat cat2 = new Cat("cat"); System.out.println(cat1.equals(cat2)); //out:true }}/** * Dog 中的没有equals方法的重写 * @author dell * */public class Dog { String name; public Dog(String name){ this.name = name; }}/** * Cat 重写了equals方法 * @author dell * */public class Cat { String name; public Cat(String name){ this.name = name; } @Override public boolean equals(Object anoObject) { if (this == anoObject) { // 如果两个对象的引用相同 return true; } if (anoObject instanceof Cat) { Cat anoCat = (Cat) anoObject; if(this.name.equals(anoCat.name)){ return true; } } return false; }}
str1和str2的值相等,String的equals在字符串中比较的是对象的值,不是引用,和==有区别,这里不做解释
第一个输出是true,equals比较String对象中的值,两个都是"123",所以输出true
同样的写法,为什么输出比较两个dog的时候输出却是false
Dog是Object 的子类,String也是Object的子类,区别在于String中重写了Object中的equals方法
下面附上String和Object 的源码
/** * 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; }/** * Obejct中的equals方法 */public boolean equals(Object obj) {return (this == obj); }
String的equals方法中先是判断两个对象的引用是否相同,在判断字符串的长度是否相同,然后判断每个字符串相同...
而Object中的equals只判断对象的引用是否相同,如果引用不同直接返回false
所以说当dog1对象使用equals方法时候调用的Object 中的equals方法,判断的是dog1和dog2的引用是否相等
当然不相等,所以输出false
再看Cat类,Cat类中实现了对Object 方法的重写,判断Cat中的name属性的值是否相等。而不是判断两个cat对象的引用是否相等
所以输出true 0 0
- Object 和 String 的equals比较
- C#中关于String.Equals(object,object)和(object==object )的比较
- C#中关于String.Equals(object,object)和(object==object )的比较
- String和StringBuffer的equals方法比较
- String的== 和equals 比较
- Java Object类中equals()方法与String类中equals()方法的比较
- Object类和String类的equals()方法对比
- Object类和String类equals方法的区别
- Object类中的equals(Object obj) 、String类的equals(Object obj)和 操作符“==”的区别
- java Object equals 和 == String equals 和 == 的异同
- String的equals类和Object的equals类的区别
- equals 和 hashcode 的关系,Object.equals 默认比较的是地址
- C# string 的==和Equals的比较
- String的 == 和 equals方法的比较
- java的String的equals方法和"=="比较
- String的equals方法和contentEquals方法的比较
- String 的 equalsIgnoreCase()和equals()比较
- java:String使用equals和==比较的区别
- [回溯]Stamps UVA165
- HBase 异常记录 ERROR: org.apache.hadoop.hbase.MasterNotRunningException: Retried 7 times
- poj1094
- C# 托盘程序设计
- 黑马程序员--交通灯管理系统
- Object 和 String 的equals比较
- Kali Linux渗透测试实战 2.2 操作系统指纹识别
- [转]软件开发基本原则(二)典型错误
- 凌乱的2013咱就这样了,祝福我在2014找回咱的场子
- Linux下Mysql的一些基本操作:
- 死亡
- 代码重构
- JPA--单向多对一
- 百度收录 淘客链接如何写