一、公知结论
1、 ==针对基本类型的数据,比较的是值;对于引用类型则比较内存地址(hashcode)
2、equals方法,对于String类型的数据,因为String重写了此方法,比较的是值(byte[] value)
二、字符串比较测试实验
1、针对同一字符串,==和equals没有区别
//这里简化比较,即平常我们以字面量方式声明的变量
String str1 = "hello world";
String str2 = "hello world";
// true,因为都指向同一内存地址(堆中的字符串常量池)
System.out.println(str1 == str2); // true
System.out.println(str1.equals(str2)); // true
2、针对同一字符串,==和equals有区别
// data.txt中存储的数据为一行hello world!
URL url = ClassLoader.getSystemResource("data.txt");
try( BufferedReader data = new BufferedReader(new FileReader(url.getPath()))){
String str1 = data.readLine(); // hello world!
//String str1 = data.readLine().inter(); // str1 == str2 为true
String str2 = "hello world!";
/**
* 可以想象http请求、io读取数据时,字符串的生成都是StringBuilder完成的,
* 但不会在常量池中生成对应的字符串
*/
System.out.println(str1 == str2); // false
System.out.println(str1.equals(str2)); // true
} catch (Exception e){
//do nothing
}
三、 最后结论
针对字符串比较值相等时,一定用equals()方法