使用==判断的是两个字符串对象的内存地址,而非字符串内容
equals:判断两个字符串内容是否相等,也会检查字符的大小写
equalsIgnoreCase()方法,会忽略字符的大小写。
好吧,上面的这个讲的确实是有点抽象~
那我们来看看下面的这一段代码:
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1 == str2);//true
System.out.println(str1 == str3);//false 对于基本操作数"=="判断操作数是否相等;对于对象使用"=="会比较内存地址是否相同
System.out.println(str1.equals(str3));//true,因为equals比较的是对象的内容是否相等
现在是不是有丢丢懂啦~~~
小知识:
在Java虚拟机中有一个保存字符串的池,它会记录所有字符串。
而Java虚拟机为了提高字符串应用效率,提供了字符串池来保存字符串常量,
str1创建字符串常量”abc”,这时会先检测字符串池中是否包含该字符,如果不包含,则创建字符串常量到字符串池中,然后再返回.
str2也赋值为字符串”abc:,这时由于字符串池中已经存在该字符串,所以不再创建,直接返回该字符串,也就是说这两个变量引用同一个字符串,那么它们的内存地址是相同的,所以str1==str2
成立.
但是使用new关键字创建的字符串会开辟内存空间,所以str1==str3
不成立
参考:《Java经典编程300例》