目录
(3)equalsIgnoreCase():字符串的比较(不区分大小写)
类 String
1.String概述:
- String类在java.lang包下,所以使用的时候不需要导包
- String类代表字符串。Java程序中的所有字符串字面值(如“abd")都作为此类的实例实现。也就是说,java程序中所有的双引号字符串,都是String类的对象。
-
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。例如:
String str = "abc";
等效于:
char data[] = {"a","b","c"};
String str = new String(data);
2.String常见构造方法
方法名 | 说明 |
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(String original) | 根据传入的字符串内容,来创建字符串对象 |
String s = "abc"; | 直接赋值的方式创建字符串对象,内容就是abc |
- 例子演示:
public class Constructor {
/*
注意:String类比较特殊,打印其对象名的时候,不会出现内存地址
而是该对象的真实值
*/
public static void main(String[] args) {
//public String():创建一个空白字符串对象,不含有任何内容
String s1 = new String();
System.out.println(s1);
//public String(char[] ch):根据字符数组的内容,来创建字符串对象
char[] ch = {'a','b','3'};
String s2 = new String(ch);
System.out.println(s2);
//public String(String original):根据传入的字符串内容,来创建字符串对象
String s3 = new String("123456");
System.out.println(s3);
//String s = "";
String s = "abcd";
System.out.println(s);
}
}
3.创建字符串对象的区别对比:
- 看这两段代码:
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //输出:true
char[] ch1 = {'a','b','c'};
String str3 = new String(ch);
String str4 = new String(ch);
System.out.println(str3==str4); //输出:false
为什么第一段输出的是true,而第二段输出的却是false呢?
原因是:双引号创建的字符串对象,在字符串常量池中存储。
通过构造方法创建的字符串对象,在堆内存中存储。
- 下列代码的运行:
/*
当字符串之间使用+号串联(拼接)的时候,系统底层会自动创建一个StringBuilder对象
然后再调用其append方法完成拼接
拼接后,再调用其toString方法转换成String类型
*/
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + 'c';
System.out.println(s1==s3); //运行结果:false
/*
java存在常量优化机制,在编译的时候,就会将"a"+"b"+"c"拼接成"abc"
而这个和上面那个代码不一样,上面那个代码是变量+常量,而下面这个代码是常量+常量
*/
String s4 = "abc";
String s5 = "a"+"b"+"c";
System.out.println(s4==s5); //运行结果:true
4.String字符串的特点
- java程序中所有的双引号字符串,都是String类的对象
- 字符串不可变,它们的值在创建后不能被更改
- 虽然String的值是不可变的,但是它们可以被共享
- 字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在
不存在:创建
存在:不会重新创建,而是直接被复用
5.字符串的比较
(1)使用 == 做比较
- 基本类型:比较的是数据值是否相同
- 引用类型:比较的是地址值是否相同
(2)equals():比较内容是否相同(区分大小写)
- public boolean equals(Object anObject):将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串
- 代码演示:
String s1 = "abc";
String s2 = "ABC";
String s3 = "abc";
char[] ch = {'a'+'b'+'c'};
String s4 = new String(ch);
String s5 = new String(ch);
System.out.println(s1.equals(s2)); //false
System.out.println(s1.equals(s3)); //true
System.out.println(s1.equals(s4)); //false
System.out.println(s4.equals(s5)); //true
(3)equalsIgnoreCase():字符串的比较(不区分大小写)
- 代码演示:
String s1 = "abc";
String s2 = "ABC";
String s3 = "abc";
System.out.println(s1.equalsIgnoreCase(s2)); //true
System.out.println(s1.equalsIgnoreCase(s3)); //true
如果有哪里说错的,欢迎评论区说出来。