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.
- String 、StringBuffer 和 StringBuilder
- String,StringBuffer,StringBuilder(转载)
- String、StringBuffer和StringBuilder
- String,StringBuffer,StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder
- String ,StringBuffer ,StringBuilder问题
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder 区别
- StringBuilder StringBuffer String
- StringBuilder。StringBuffer。String
- String,StringBuffer与StringBuilder
- String、StringBuffer和StringBuilder
- String, StringBuffer, StringBuilder区别
- Hibernate的查询 标准(Criteria)查询 聚合和分组
- 采用BlockingQueue实现内存消息队列
- PHP补丁[LAMP]
- 孙鑫VC++第5章文本编程
- 教你如何编写自己的bat文件1
- String && StringBuffer && StringBuilder
- [学习笔记] 4个有用程序
- 集合
- 受尽苦难而不厌,此乃修罗之道
- 0911
- 孙鑫VC++第6章菜单
- Android 应用开发笔记 - 文本框(TextView)
- Hibernate xml配置方法之ManyToOne(单向关联关系)
- [学习笔记] Linux 文件系统