黑马程序员--equals方法与==操作符的异同
来源:互联网 发布:博物馆软件 编辑:程序博客网 时间:2024/06/05 04:28
-------android培训、java培训、期待与您交流! --------
equals方法与==操作符的异同
1. 引用类型比较引用(是否指向同一个对象);
例:Person p1=new Person(); Personp2=new Person();if(p1==p2){…}
2. 基本类型比较值;
例:int a=5; if(a==6){…}
注:用"=="进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;
equals()方法:
equals()方法是Object类的方法,由于所有类都继承Object类,也就继承了equals()方法。只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。格式:obj1.equals(obj2)
特例:当用equals()方法进行比较时,对类File、String、Date及封装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;原因:在这些类中覆盖了equals()方法。
为了更好的理解equals()方法和==操作符,我们用下面一段代码来说明它们的异同和特点.
public class equalsTest {public static void main(String args[]) {Person person1 = new Person("AA", 12);Person person2 = new Person("AA", 12);System.out.println(person1 == person2); // flase System.out.println(person1.equals(person2));// flase String str1 = new String("aaa");String str2 = new String("aaa");System.out.println(str1 == str2);// flase System.out.println(str1.equals(str2));// trueString str3 = "bbb";String str4 = "bbb";System.out.println(str3 == str4);// trueSystem.out.println(str3.equals(str4));// trueequalsTest et = new equalsTest();// System.out.println(et==person1);编译出错}}class Person {private String name;private int age;public Person() {}public Person(String name, int age) {super();this.name = name;this.age = age;}}
分析:
1.person1==person2和person1.equals(person2) 都返回flase是因为==操作符和equals()方法都判断person1和person2引用类型不是指向同一个对象,所以都返回flase.
2.str1 == str2和str1.equals(str2),前者返回false原因和1一样,str1和str2不是指向同一对象,而后者返回true是因为String,Date,File,及封装类类重写了equals方法, 是比较类型及内容而不考虑引用的是否为同一对象,内容相等则返回ture.
下面这是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; }
它首先判断传入的对象是同一对象,如果是,直接返回true,如果不是,再判断类型是否为String类型,如果是,强制转换传入的对象为String类型,并让其与当前对象的字符逐个对比.全部相同则返回ture.其它情况都返回flase.
3.str3==str4和str3.equals(str4)都返回ture;这个和2结果不同,原因是在内存中有一个字符串缓存池,在创建str3的时候把字符串bbb放入字符串缓存池中,等到创建str4的时候,会优先去缓存池中去找,如果要初始化的值和bbb字符串一样,则直接把字符串的引用地址赋给str4,所以==操作符和quals方法都判断两个变量指向同一对象,都返回ture.
4.// System.out.println(et==person1);编译出错 :是因为==操作符进行比较时,符号两边的数据类型必须可兼容(可自动转换).
- 黑马程序员--equals方法与==操作符的异同
- 黑马程序员_方法重载与方法覆盖的异同
- 黑马程序员入学篇——(2)“==”运算符与equals()方法的区别
- 黑马程序员—C# equals与==的区别
- 黑马程序员--equals与==的区别
- 黑马程序员-Equals()与运算符==区别
- 操作符 “==” 与对象的 equals() 方法
- 操作符“==”与对象的equals()方法
- java4Android(23):equals 的使用方法 instance 操作符【==与equals方法的区别】
- Scala的eq,ne,equals,==方法与Java异同
- ==和equals()区别(操作符==与对象equals方法的不同)
- 黑马程序员 equals() 方法
- [黑马程序员]集合_HashSet的equals方法
- 黑马程序员_String类以及equals和==方法
- 黑马程序员----"=="和equals方法区别
- 黑马程序员-hashcode与equals的作用
- java中的==操作符与equals方法
- 黑马程序员_复写Object中的equals()方法和“==”的特点
- OSG中的智能指针
- js形成心形效果
- 3uDc 25cA5cheap burberry KFR4 nKY
- 路渤成训艺截人捅玖诓炒荷制汲挠
- cdRW bpyDOugg boots Rr77 XgY
- 黑马程序员--equals方法与==操作符的异同
- 亚马逊云服务的由来
- HDU 3123-GCC(递推)
- 关于常量的详细说明
- 算法导论---快速排序
- BZOJ3275 Number (最小割)
- Android值得推荐的书籍
- 对本博客的一点点小小说明。。。
- zoj3201Tree of Tree