==:比较地址值(是不是同一个对象)
equals:默认也是比较地址,但String、包装类重写后,比较内容值
三、基本数据类型用 ==
基本数据类型:byte、short、int、long、float、double、boolean、char只能用==,比较数值本身。
int a = 10; int b = 10; System.out.println(a == b); // true引用类型 == 的作用
引用类型使用==比较的是对象的内存地址,不是内容。
String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // false 地址不一样equals () 方法使用
- Object 原生 equals:本质和 == 一样,也是比较地址
- String、Integer 等类重写了 equals,变成比较内容
String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1.equals(s2)); // true 内容相同字符串常量池
String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); // true原因:直接赋值会放入字符串常量池,复用同一个地址。
==可以用于基本类型和引用类型:- 基本类型:比较数值
- 引用类型:比较内存地址
equals()只适用于引用类型:- 没重写:和 == 一样比地址
- 重写后(String、Integer):比较内容
- 开发中判断字符串是否相等,一律用 equals
比较字符串时,建议把常量放前面,避免空指针:
// 推荐 if ("admin".equals(username)){ }