java没有内置的字符串类型,而是在标准的java库中提供了一个预定义类———String。
1.子串
String greeting="hello";
String str=greeting.substring(0,3);//创建了一个由“hel”组成的字符串
substring方法中从0开始计数,此例中返回从0开始截取到3之前的字符串(不包含3),greeting.substring(a,b)的长度是(b-a)。
2.拼接
java使用“+”连接两个字符串,当讲一个字符串与一个非字符串的值拼接时,后者转化为字符串。
int age=13;
String rating="pg"+age;//rating="pg13";
如果需要把多个字符串放在一起,用一个定界分割符,可以使用静态join方法
String all=String.join("/","hi","you","are","welcome");//all="hi/you/are/welcome"
3.不可变字符串
greeting=greeting.substring(0,3)+p;//greeting=help
java文档中将String类对象称为不可变字符串,如同数字3永远是数字3一样,字符串“hello”永远包含字符‘h’、‘e’、’l’、’l’、’o’的代码单元序列,而不能修改其中的任何一个字符。但可以改变字符串变量greeting,让它引用另外一个字符串。
不可变字符串还有一个优点:编译器可以让字符串共享。可以想象将各种字符串存放在公共的存储池中,字符串变量指向存储池中相应的位置。如果复制一个字符串变量,原始的字符串与复制的字符串共享相同的字符。
4.检测字符串是否相等
s.equals(t)//如果字符串s与字符串t相等,则返回true;否则,返回false
s.equalsIgnore(t)//检测s与t是否相等,且不区分大小写
“==”运算符只能确定两个字符串是否放在同一个位置上,不能用来检测两个字符串是否相等
String greeting ="hello";
boolean flag1=(greeting=="hello");//probably true
boolean flag2=(greeting.substring(0,3)=="hel")
//probably false
实际上只有字符串常量是可以共享的,而substring等操作产生的结果并不是共享的
5.空串与Null串
空串是长度为0的字符串,它是一个java对象,有自己的串长度(0)和内容(空),String变量还可以存放一个特殊的值——null,表示目前没有任何对象与该变量关联,如果在一个null值上调用对象,会出现错误。