String表示字符串类型。
注意c中没有表示字符串的类型。
String内部包含如下两个变量。
java中String结尾没有/0,java不需要/0标注结束位置。
str2代表指向的对象内容为空,str3代表不指向任何对象。
str1和str2指向对象不一样,所以不相等
可以用如下方式判断对象中的内容是否相等。
这个equal是string自己的equal。
下面的是忽略大小写进行比较。
利用charAt操作字符串中的字符。
indexof可以查看某个字符在哪个位置。
还可以指定从哪个位置开始找。
lastInderof是从后往前找但返回结果还是从前往后数的数。
下面代表从第6个位置开始往前找第一个o。
返回的是数组下标。
valueof将其他类型转换为字符串。
我们发现valueof可以将各种类型转换为字符串。
变大小写。
下面用replace可以进行替换,替换不是在原先字符串本身上改变的。
我们发现按.分割不能打印。
我们可以用两个斜杠进行转义。
str3中如果要用\作字符至少需要两个\,split中如果以\分割,至少有4个。
如果想以不同的字符作为间隔,中间要加"|"。|
1. 字符 "|","*","+" 都得加上转义字符,前面加上 "\\" .2. 而如果是 "\" ,那么就得写成 "\\\\" .3. 如果一个字符串中有多个分隔符,可以用 "|" 作为连字符
还可以多次分割。
subString也是不会改变原先字符串的,只是赋值给ret后去掉一部分字符串。 原先的字符串会放到常量池,所有被双引号引起来的都会进常量池。
trim能够删除字符串两边的空格。
str1指向的是字符串在常量池中的地址。 和new出来的str2的内容不一样。
下面这俩都在常量池中,所以地址一样。
- 字符串修改
下面是上面的实现原理。不建议使用+=进行拼接。因为中间创建对象产生了很多临时对象。降低效率。
- StringBuilder和StringBuffffer
上面的是在同一个对象中修改的。
下面代码创建了2个对象。一个是双引号引起来的字符串对象,new了一个String对象。
String str = new String("ab");
下面代码创建了6个对象。两个双引号引起来的2个对象,new了2个对象。字符串拼接会产生StringBuilder对象。拼接后的对象赋给str会调用toString,会创建一个string对象。
String str = new String("a") + new String("b");
字符串常量池的
1.双引号引起来的 统一放到常量池
2.如果常量池有 那么 就不再额外存储了