1、equals 和 ==的区别
==:
- 基本数据类型,比较的是值是否相等(注:基本数据类型有:(byte,short,char,int,long,float,double,boolean))
- 引用数据类型,比较的是地址是否相等
equals:
- 没有重写的情况下,比较的是两个对象的地址是否相等,此时等价于 ==。
- 重写的情况下,按重写的方式进行比较。
比较基本数据类型:值相等就返回true,不相等就返回flase,与地址无关
public static void main(String[] args) {
Integer a = 1; //定义一个变量a,赋值为1
Integer b = a; //变量b,将a的值赋值给b
Integer c = 1; //定义一个变量从,值为1
System.out.println(a.equals(1)); // a == 1 返回 true
System.out.println(a.equals(b)); // a == b 返回true
System.out.println(a.equals(c)); // a == c 返回true
}
Integer中重写了equals方法:
比较引用数据类型:比较的是地址是否相等
public static void main(String[] args) {
// 注意 String类重写了equals 方法
String str1 = "World";
String str5 = "World";
String str2 = new String("World");
String str4 = new String("World");
String str3 = str2; // 引用传递,同一对象
//==比较的是地址是否相等
System.out.println(str1 == str2); // false(str2是new的一个新地址,和str1地址不同)
System.out.println(str1 == str3); // false(str3地址和str2地址一样,和str1地址不同)
System.out.println(str2 == str3); // true(引用str2,地址相同)
System.out.println(str1 == str5); // true(String作为基本类型,没创建新地址)
System.out.println(str4 == str2); // false(内存地址不同)
//equals比较的是值是否相等
System.out.println(str1.equals(str2)); // true(内容一致,都是“World”)
System.out.println(str1.equals(str3)); // true(内容一致,都是“World”)
System.out.println(str2.equals(str3)); // true(内容一致,都是“World”)
System.out.println(str2.equals(str4)); // true(内容一致,都是“World”)
System.out.println(str1.equals(str5)); // true(内容一致,都是“World”)
}
String中重写了equals方法: