写在前面:https://blog.csdn.net/weixin_45857051/article/details/107877785
一、基本概念
字符串常量池
new的对象不在常量池中;
程序当中直接写上的双引号字符串,就在字符串常量池中。
1、==
对于基本类型来说,== 是进行数值的比较。
对于引用类型来说,== 是进行【地址值】的比较。
2、equals / equalsIgnoreCase
如果确实需要字符串的内容比较,可以使用两个方法:
public boolean equals(Objectg obj);
参数可以是任何对象;
只有参数是一个字符串并且内容相同的才会给true,否则返回false。
注意事项:
1、任何对象都能用Object进行接收。
2、equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样;
3、如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
推荐: “abc”.equals(str)
不推荐: str.equals(“abc”)
public boolean equalsIgnoreCase(String str);
忽略英文字母大小写,进行内容比较。
3、compareTo / compareToIgnoreCase
public int compareTo(String str)
该方法是对字符串内容按字典顺序进行大小比较,
通过返回的整数值指明当前字符串与参数字符串的大小关系,
若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。
public int compareToIgnoreCase (String str);
与compareTo方法相似,但忽略大小写。
二、实例讲解
(这里是b站黑马视频中的,对字符串常量池的解释
https://www.bilibili.com/video/BV1Ak4y1o7y8?p=135)
String str1 = "abcde";
String str2 = "abcde";
char[] charArray = {'a', 'b', 'c','d','e'};
String str3 = new String(charArray);
1、==
System.out.println(str1 == str2); //true
System.out.println(str1 == str3); //false
System.out.println(str2 == str3); //false
2、equals / equalsIgnoreCase
System.out.println(str1.equals(str2)); //ture
System.out.println(str2.equals(str3)); //true
System.out.println(str3.equals("abcde")); //true
System.out.println("abcde".equals(str1)); //true
String str4 = "abcde";
System.out.println(str1.equals(str4)); //false
String str5 = null;
System.out.println("abc".equals(str5)); //false(推荐把常量写前面)
/*System.out.println(str5.equals("abc"));
不推荐 :报错,空指针异常 NullpointerException*/
String strA = "Java";
String strB = "java";
System.out.println(strA.equals(strB));
//false,严格区分大小写
System.out.println(strA.equalsIgnoreCase(strB));
//true,忽略英文字母大小写
3、compareTo / compareToIgnoreCase
System.out.println("a".compareTo("b")); //-1
System.out.println("a".compareTo("A")); //32
System.out.println("a".compareToIgnoreCase("A")); //0