String && StringBuffer && StringBuilder

来源:互联网 发布:seo外包hane888 编辑:程序博客网 时间:2024/05/19 12:38

【String 类】
【特点:】
1.      Java语言中用于描述最常见的字符串数据的对象。
2.      字符串数据都是一个对象。
3.      字符串数据一旦初始化就不可以被该变了。
                但可以改变变量的指向。
                双引号表示的都是字符串常量。
4.      字符串对象(字符串常量)都存储在常量池中。字符串常量池。
              |------>在方法区中开辟空间,专门存储常量。

【常量池】——固定的常用的数据,都存放在这里!

【字符串的创建方式:】
    String str = "abcd";——在常量池中创建一个字符串对象,存放于 常量池;
    String t1 = new String("abcd");——在堆内存中创建 String类的对象,并在常量池中创建了“abcd"对象。

【对于字符串对象的比较——应该用equals方法,注意:基本数据用 = = 进行比较相同,对象比较相同用equals。】
        String 类覆盖了Object中的equals方法,比较的是字符串内容是否相同。

—————————————————————————————————————————————————
【字符串对象应该具备什么功能便于操纵呢?——查找对应功能的办法!】
1.  字符串长度? length();(对象的功能查找办法)
    如果有这个功能,结果应该是整数。而且该方法操作的就是本类字符串对象的方法。不需要参数。接下来,按照返回值类型进行查找,匹配后,在看参数列表,匹配后,参看名称和介绍。int  length();
     明确返回值类型;参数类型。
2.  indexOf(),返回字符串在字符串中第一次出现的位置。
【凡是找角标的,没有找到:返回值均为—— -1】

———————————————————————————————————————————————————
【字符串缓冲区:StringBuffer】
特点:
1.        缓冲区就是用来缓存数据,意味着它是一个容器。
2.        该容器的长度是可变的(初始容量为 16)。
3.        提供了对容器中内容的操作方法(增,删,改,查)
4.        该缓冲区中可以添加多种类型的元素,基本类型 和 引用类型。
5.        无论怎么改变容器中的数据,最终要使用结果,还会必须要将其转成字符串,使用toString方法。
【好处】——无论长度知否,无论类型知否!都可以用。
6.      线程安全的可变字符序列
【面盆:面,枣,花生】

【示例:】
String str = "abc" + 4 + 'c' 的原理:
    底层是这样实现的:str = new StringBuffer().append("abc").append('c').toString( );

1. append( )在结尾添加(追加);
2. 在任意位置添加——insert( );
3. 删除 delete();  sb.delete(0 ,sb.length()); 清空缓冲器。

不查任何文档就得写出来

——————————————————————————————
【很多容器的底层:都是——数组!】

【可变数组长度的原理:】
以StringBuffer( )为例来说:
创建一个一半(or 一倍)于原来的数组,将原来的数组内容存放在新数组的对应位置,后面的加到新的地儿上。
可以用默认的,可以指定长度 这个是处于效率的考虑!
——————————————————————————————————————————————————

【StringBuffer 和 数组的区别:两个容器的区别】

1.     数组容器是——固定的长度;StringBuffer是可变长度的。
2.     数组容器一旦初始化就明确了元素的类型,StringBuffer可以存储任意类型。
               包括基本和引用数据类型。
3.     数组存储完元素可以对元素操作(通过角标);
       StringBuffer存储完元素后,都会变成字符串,只能用字符串的方法来操作。数据个数可以是固定的,也可以是不固定的;数据类型可以是多种,最终这些数据都变成了字符串来操作。
———————————————————————————————————————————————————

【JDK1.5新出来的】
StringBuilder含义:——新的字符串缓冲区;
功能和StringBuffer一模一样。可变字符序列。
到底区别呢?
StringBuffer——线程安全的;——多线程使用。
StringBuilder——线程不安全——为提高效率,只适用于单线程,不用判断同步锁。

【StringBuilder 和 StringBuffer的区别】——

对于容器,被多线程操作,容易出现安全问题。
因为:一个线程负责添加,一个线程负责删除,因为线程的随机性就会出现安全问题。

加锁,一个线程在执行容器中的内容时,其他线程不可以执行。
所以凡是可以操作容器数据的方法,都需要明确这个锁。
每调用一次操作容器的方法,(添加,删除)都需要判断这个锁。
对应多线程——安全,但效率低。对单线程——不涉及安全,但效率低,所以,对线程提供了StringBuilder .不需要同步的缓冲区。
实际开发时,建议使用StringBuilder ,只有在多线程时,才使用StringBuffer.