Java 中 == 和 equals() 的区别
==:
- 如果比较的对象是基本数据类型,则比较的是对象的值是否相等;
- 如果比较的对象是引用数据类型,则比较的是对象的地址是否相等。
equals():
- 用来比较两个对象的内容是否相等;
equals()
方法不能用于基本数据类型的比较。
测试一:基本数据类型比较
int i = 24;
int j = 24;
System.out.println(i == j); // true
//System.out.println(i.equals(j)); // error
测试二:引用数据类型比较
Integer i1 = new Integer(8);
Integer i2 = new Integer(8);
System.out.println(i1 == i2); // false
System.out.println(i1.equals(i2)); // true
测试三:字符串比较
首先,我们知道 String
是不可变对象,一经创建就不能再修改,所有的修改操作其实都是创建新的 Striing
对象。并且创建字符串有两种方法,直接赋值和 new String()
。
直接赋值测试:
String s1 = "kobe";
String s2 = "kobe";
System.out.println(s1.equals(s2)); // true
System.out.println(s1 == s2);// true:"kobe" 是字符串常量,s1、s2两个引用都指向这个对象
s1 = "bryant"; // s1 指向另一个对象
System.out.println(s1.equals(s2)); // false
System.out.println(s1 == s2); // false
new String()
测试:
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3.equals(s4)); // true
System.out.println(s3 == s4); // false
直接赋值和 new String()
测试:
String s5 = "string";
String s6 = new String("string");
System.out.println(s5.equals(s6)); // true
System.out.println(s5 == s6); // false