java中== 和equals的区别
本文主要介绍== 和equals的区别
1. == 比较的是地址,引用类型(除了String类)的时候,只要不是同一个对象,就不是同一个地址,String类型的时候,如果new出来两个对象,那么也是不同地址,如果不是new,那么就是同一个地址,因为都是存放在字符串常量池中,如果是基本数据类型,都是存放在常量池中,所以地址都是一样的。
代码如下图所示:
String str_1 = new String("123"); String str_2 = new String("123"); // str_1和str_2是不同的对象,因此地址不同。 System.out.println(str_1 == str_2); // false
String str_1 = "123"; String str_2 = "123"; // str_1和str_2都是常量,存放在字符串常量池中。 System.out.println(str_1 == str_2); // true
2. equals比较的如果是引用类型(除了String类型),那么使用的是object中的equals方法,比较的地址是否一样;
如果是String类型的对象,String类重写了equals方法,首先比较地址是否一样,一样返回true;内容不一样返回false。
如果是基本数据类型对应的包装类(Integerater...),使用的equals也不是Object中的equals方法,而是重写了该方法,首先比较是否是同类型,不同类型直接返回false,同类型再比较内容是否一致,一致返回true。
String str_1 = "123"; String str_2 = "123"; System.out.println(str_1.equals(str_2)); // true
String str_1 = new String("123"); String str_2 = new String("123"); System.out.println(str_1.equals(str_2)); // true