案例
int num1 = 10;
int num2 = 10;
System.out.println(num1 == num2);
String s1 = "chance";
String s2 = "chance";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
String s3 = new String("chance");
String s4 = new String("chance");
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
Scanner scanner = new Scanner(System.in);
Scanner scanner2 = new Scanner(System.in);
System.out.println(scanner.equals(scanner2));
Scanner sc = scanner;
System.out.println(scanner.equals(sc));
总结
- 对于基本的数据类型,“==”作为关系运算符,比较的是值。
- 在引用数据类型中,“==”和equals()比较的都是在堆中的地址是否相等。
- 但是String、Integer、Date等类中重写了equals()和hashCode()方法,不再比较他们的地址。
- 例如比较字符串是否相等时,使用”==”会比较他们在内存中的堆地址是否相同,而”equals()”仅仅比较内容是否一致。这个需要特别的注意。