黑马----JAVA字符串

时间:2023-03-09 08:43:04
黑马----JAVA字符串

黑马程序员:Java培训、Android培训、iOS培训、.Net培训

Stirng、StringBuffer和StringBuilder都实现了字符序列接口CharSequence,都是final类。

一、Stirng、StringBuffer和StringBuilder

(1) 三者都可以存储和操作字符串。

(2)String提供了数值不可改变的字符串,而StringBuffer和StringBuilder是可改变的。

(3)操作String对象是,可能会额外产生许多临时变量,而StringBuffer和StringBuilder不会。

(4)String实现了equals()方法,而StringBuffer和StringBuilder没有。即new String(“abc”).equals(new String(“abc”))的结果为ture;而new StringBuffer(“abc”).equals(new StringBuffer(“abc”))的结果为false.。

(5)StringBuffer实现了线程安全,而StringBuilder没有。但,在单线程下,StringBuilder的性能比StringBuffer好。所以,……..

二、String的变与不变

1、String不变:是指String对象的内容是不可变的,一旦试图去修改String对象的内容,计算机就会创建新的String对象(开辟新的内存空间)存放新的结果,同时指向原先String对象的String变量会指向新的String对象。即String对象是不可变的,但String变量可改变其所指向。

2、String的特别案例

(1)有如下代码:

String a = new String(“123”);

String b = new String(“123”);

请问:a与b指向的是同一个对象吗………

答案:a与b指向的是不同的对象,计算机为相同的字符串常量开辟不同的空间。

(2)有如下代码:

String a = “123”;

String b = “123”;

请问:a与b指向的是同一个对象吗………

答案:a与b指向的是同一个对象,计算机只为相同的字符串常量开辟一份空间

(3)有如下代码:

String a = “123” + “”;

String b = “123” + “”;

请问:a与b指向的是同一个对象吗………

答案:a与b指向的是同一个对象,编译器对上述代码进行优化(“123” + “”与“123”等价)

三、正确使用Stirng、StringBuffer和StringBuilder

1、字符串连接,不应该使用String,而应首选使用StringBuilder,如果要求线程安全,则选用StringBuffer。

2、使用StringBuilder和StringBuffer时,要为它们配置初始容量(尽管需要计算)。

3、通过StringBuilder和StringBuffer的toString()方法,返回一个String对象。

4、数字转换为字符串时,不是使用包装器的toString(),而应当使用String.valueOf(…)