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.如果常量池有 那么 就不再额外存储了



















