equals和“==”的区别
java中的8种数据类型(对应的数值包装类)
整型:byte(字节【Byte】)、short(短整型)【Short】、int(整型)【Integer】、long(长整型)【Long】
实数:float(单精度浮点数)【Float】、double(双精度浮点数)【Double】
字符类型:char【Character】
布尔类型:boolean【Bollean】
在引用类型中:
equals比较的是两个引用变量是否指向同一个对象,如果指向同一个对象返回true,否则false
“==”在比较引用类型是作用和equals一样也是对比空间地址
class People{
int i;
}
public class equalsTest {
public static void main(String [] args){
People people1=new People();
People people2=new People();
System.out.println("people1==people2=?"+(people1==people2));
System.out.println("people1.equals(people2)=?"+people1.equals(people2));
}
}
但是Object的某些子类如String,数值包装类(Integer,Character等)、Date‘File,他们复写了Object类的这个方法,将其改为对比对象的内容,而不是空间地址。
public class equalsTest {
public static void main(String [] args){
Integer integer1=new Integer(22);
Integer integer2=new Integer(22);
System.out.println("integer1==integer2=?"+(integer1==integer2));
System.out.println("integer1.equals(integer2)=?"+integer1.equals(integer2));
String string1=new String("Good");
String string2=new String("Good");
System.out.println("string1==string2=?"+(string1==string2));
System.out.println("string.equals(string2)=?"+string1.equals(string2));
}
}
解析:integer1,integer2是两个不同的对象,“==”是比较两个对象的空间地址,所以integer1==integer的结果为false,integer1,integer2由于这两个对象的内容相同都是22,String,数值包装类(Integer,Character等)、Date‘File,他们复写了Object类的这个方法,将其改为对比对象的内容,而不是空间地址。所以结果为true。
在String中需要注意两点:
1.String是一个特殊的引用类型,对于两个字符串的比较,不管是“==”还是equals,这两者比较的都是字符串是否相等。
public class equalsTest {
public static void main(String [] args){
String str="aa";
String str2="aa";
System.out.println(str==str2);
System.out.println(str.equals(str2));
}
}
2.当你创建两个String对象时,内存中的地址是不一样的,你可以赋相同的值。
public class equalsTest {
public static void main(String [] args){
String str3=new String("aaa");
String str4=new String("aaa");
System.out.println(str3==str4);
System.out.println(str3.equals(str4));
}
}
Integer的比较
public class equalsTest {
public static void main(String [] args){
int i=2;
int j=2;
System.out.println(i==j);
// System.out.println(i.equals(j));
Integer a=1000;
Integer b=1000;
System.out.println(a==b);
System.out.println(a.equals(b));
}
}
在传入的参数是-128~127,直接用int原始数据类型,而超出这个范围,则new一个新的对象。所以==比较的是内存地址,返回false,equals比较的是对象的内容返回true
在基本数据类型中:
“==”比较的是属性的值
基本数据类型中不可以用equals来比较
总结:
在基本数据类型中:
“==”比较的是属性的值
基本数据类型中不可以用equals来比较
在引用数据类型中:
equals比较的是两个引用变量是否指向同一个对象,如果指向同一个对象返回true,否则false
“==”在比较引用类型是作用和equals一样也是对比空间地址
但是,Object的某些子类如String,数值包装类(Integer,Character等)、Date‘File,他们复写了Object类的这个方法,将其改为对比对象的内容,而不是空间地址。