(注意,说明这==跟equals的区别一定要先说明一个再去说明另外一个,这样才不会混淆)
==操作符是对比两个变量的值是否相等,也就是比较两个变量所对应的内存中所存储的数值是否相同,要对比两个基本数据类型数据或者两个引用变量是否相等,只能用==操作符,
如果变量指向的是对象类型,那么,这时候就涉及到了两块内存,对象在堆内存中的一块内存和变量(引用)在栈内存中的一块内存,例如 Object obj=new Object();中 new Object()在堆中占一块内存和Obj在栈中占一块内存 ,此时obj占用的内存存储的就是对象占用的那块内存的首地址,对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即是要看两个变量存储的数值是否相等,这时候需要用==操作符进行比较。(上面就是==操作符的特点)
equals方法是用来比较两个独立对象的内容是否相同,就好比是比较两个人长得是否一样,它比较的是两个完全独立的对象,(是不是长得一样,这个可以根据自己定的标准去认定)
例如:String a=new String(“123456”);
String b=new String(“123456”);
这两个是完全独立的对象,a,b分别都指向不同的对象,这是两个不同的对象,它们的首地址也是不一样的,也就是说a,b变量在栈中存储的数值都是不一样的,所以,a==b将返回false ,但是这两个对象的内容又是相同的,怎么办,这时候就可以用equals去进行比较了,a.equals(b)将返回true。在实际的开发中我们会进场对比传递进来的字符串是否相等,我们基本上都是用equals去进行比较的。因为在String中已经办我们定义好了equals这个方法,所以我们可以直接使用,那么如果一个类没有自己定义 equals 方法,那么它将继承 Object 类的 equals 方法,Object 类的 equals 方法的,
实现代码如下:
boolean equals(Object o){
return this==o;
}
我们定义的类都是没有覆盖equals方法的,还是继承Object 类的 equals 方法的。
这说明,如果一个类没有自己定义 equals 方法,它默认的 equals 方法(从 Object 类继承的)就是使用==操
作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用 equals 和使用==会得到同样的结果,如果比较的
是两个独立的对象则总返回 false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必
须覆盖 equals 方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
本篇笔记如果有哪里写错或者写的不好的地方,请劳烦各位能够指出,我们共同进步。