> 文章列表 > [java]String类

[java]String类

[java]String类

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的内容不一样。

 下面这俩都在常量池中,所以地址一样。

String 是一种不可变对象 . 字符串中的内容是不可改变。字符串不可被修改
1. String 类在设计时就是不可改变的, String 类实现描述中已经说明了
value被private修饰,并且类中没有实现调用value的方法,所以无法改变value的值

String 类中的字符实际保存在内部维护的 value 字符数组中
1. String 类被 fifinal 修饰,表明该类不能被继承
2. value 被修饰被 fifinal 修饰,表明 value 自身的值不能改变,即不能引用其它字符数组,但是其引用空间中 的内容可以修改。
  • 字符串修改

下面是上面的实现原理。不建议使用+=进行拼接。因为中间创建对象产生了很多临时对象。降低效率。

  •  StringBuilderStringBuffffer
由于 String 的不可更改特性,为了方便字符串的修改, Java 中又提供 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.如果常量池有 那么 就不再额外存储了