Java 比较两个字符串是否相等有两个操作符, 双等于(==)与字符串对象的equals方法.
这两个比较操作符虽然都是比较两个字符串是否相等的,但是从根本上讲还是有细微差别的.
一、场景模拟
1.1 声明变量值均为"Hello"的三个变量.
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
1.2 内存分析
str1与str2变量指向常量池中同一块内存区域,str3指向堆中的内存区域.
二、双等于(==)
2.1 使用==比较
System.out.println(str1==str2);//true
System.out.println(str1==str3);//false
2.2 结果分析
此时str1、str2、str3为引用类型变量,所以比较的是变量上的内存地址.
str1与str2指向的均为常量池中的同一块内存区域.因此str1 == str2结果为True.
str1与str3分别指向常量池中和堆中不通区域的内存地址.因为str1 == str3结果为False.
三、equals方法
3.1 使用equals方法比较
System.out.println(str1.equals(str2));//true
System.out.println(str1.equals(str3));//true
3.2 结果分析
equals比较引用类型变量所引用的对象的内容.
str1、str2与str3的内容均为"Hello",因此结果都为True.
四、总结
== 主要用于比较两端变量的值是否相等. equals方法比较对象的内容是否相等.
如果只是想比较变量值是否相等应该尽量采用equals方法.