注:本系列为个人学习笔记,存在知识点欠缺或知识逻辑不连贯,见谅。
一、什么是字符串
-
定义:字符串是字符的有限序列。Java中的字符串是String是一个类,属于引用数据类型。
-
String类比较特殊,特殊之处在于他具有某些基本数据类型的特性。
二、字符串常量
-
字符串常量,由双引号括起来表示的字符序列。注:可包含转义字符。例:"hello","汉字\n",""(空字符串)等。
-
在编写代码以及数据输入的过程中,字符串只能在同一行内,不能换行。
-
字符串长度指其中包含的字符个数。
-
约定字符串中第一个字符的序号为0,-1表示某字符不在指定字符串中。
-
注:字符串常量本身是一个不可变化的固定值,在Java中,对于固定的、不可变化的内容,存在一个缓存功能,所以当两个不同变量名,但字符串内容相等的字符串常量用“==”号进行比对时,会出现逆引用数据类型比对的结果(或不可预估的结果),所以字符串的比对,不能用“==”进行比对,得用equals()方法。例:
-
String str1 = "abcd"; String str2 = "ab" + "cd";//因为字符串常量不可变化,所以每次进行修改都是创建一个新的变量 System.out.println(str1 == str2);//输出结果为true String str3 = "ab"; System.out.println(str1 == str3 + "cd");//输出结果为false
-
拓展:在Java中,对数据进行比对时,只有基本数据类型用“==”,其余的数据都用equals()方法,例如:String、Integer等包装类。
三、字符串变量及运算
-
赋值运算:
-
String str1 = "abc";//字符串变量赋值为字符串常量 String str2 = str1;//两个字符串变量赋值 //注:用单引号括起来的是字符常量,用双引号括起来的是字符串常量,两者数据类型不兼容,不能进行赋值。
-
连接运算:
-
String str1 = "abcd"; String str2 += str1;//因为字符串常量不可变化,所以每次进行修改都是创建一个新的变量 System.out.println(str2);//输出结果为"abcd" //注:只有+=能用于字符串变量,其他的复合赋值运算符均不能用于字符串变量。
-
注:当字符串与其他数据类型的值进行连接运算时,Java会自动对其他数据类型的值进行隐式转换为字符串。
-
在Java中,字符串不是字符数组,不能像C/C++里面那样用str[1]来表示字符串里面的字符,得用charAt(1)。例:
-
String str = "abcdefg"; System.out.println(str[0]);//这样的写法是不可取的,会报错 System.out.println(str.charAt(0));//输出a
四、字符串的类特性
-
String是一个类,具有构造方法、实例方法等。可通过String对象调用String的方法实现获得字符串长度、获得指定位置字符、获得指定位置字符串等功能。
-
调用String类中的方法,可执行Java定义的操作,实现相应的功能。
-
字符串变量.方法([参数列表])
-
String类中的常用方法:
-
valueOf():将其他的数据类型强制转换成字符串类型,注:所有封装数据类型的valueOf()方法都可用于数据类型强制转换;
-
format():将字符串按照指定格式输出,该方法具有返回值,需要定义一个变量来对其进行输出;
-
indexOf():从指定位置开始查找某字符在字符串中的位置(未指定默认从0开始找),找到返回第一个出现的位置,找不到返回-1;
-
trim():去除字符串中的结尾空格和\t;
-
replace():将指定的内容替换字符串中的指定内容,该方法具有返回值,需要定义一个变量来对其进行输出;
-
substring():指定字符串的范围,将指定范围内的字符串剪切出来;
-
toupperCase()、todownCase():大小写转换;
-
split():根据指定的内容将字符串进行分割。
-
五、StringBuffer和StringBuilder(字符串变量)
-
String当修改字符串时,是在内存中创建一个新的字符串,并把地址传给String 对象,因此比较浪费空间,而StringBuffer和StringBuilder是在初始时创建一个容器,当修改的时候会修改容器中的内容,而不是创建一个新的容器,所以,如果有一个需要频繁改变的字符串的话,最好不要使用String。
-
StringBuffer和StringBuilder在使用上基本相同,但在线程安全上,前者线程安全,后者不安全。