Java核心API -- 2(String、StringBuilder、StringBuffer)

1. String字符串

1)String类型介绍

String类采用final修饰,String对象为不可变对象,一旦在内存中创建,内容不能发生变化,若要对字符串内容改变,那么就会创建新对象。

String对象创建,有静态和动态之分。

String str1 = "dadsadad";

String str2 = new String("dasdasdadad");

2)String常量池

JVM对字符串有一个限制,让字符串作为不变对象,这样就可以做到重用。事实上,当我们通过字面量,常量来初始化一个字符串时,JVM首先会从字符串的常量池(一个JVM内部维护的内存区域,用来保存已经创建过的字符串对象)中查询用来保存该字符串的对象是否存在,若存在则直接引用,若不存在则创建该字符串对象并存入常量池,然后引用它。

3)字符串的常用方法

String str = "dn1aAj2FD6hbF4hjaX0f";

① str.length(),获取字符串的长度,返回int类型的数值

② str.indexOf(char c),获取字符串中某个字符第一次出现的索引,找不到,返回值为-1。

str.lastIndexOf(char c), 返回指定字符在此字符串中最后一次出现的索引,找不到,返回值为-1。

③ str.charAt(int index),获取字符串指定下标位置上的字符,返回值是char类型的。

④ str.toUpperCase(),将字符串str全部转成大写,

str.toLowerCase(),将字符串str全部转成小写,返回的都是新的字符串。

⑤ str.stratsWith(String s),判断字符串str是不是以字符串s开头,

str.endsWith(String s),判断字符串str是不是以s结尾,返回值都是boolean类型的。

⑥ str.equals(String s),判断两个字符串的内容是否相等(在前一章已经分析了==和equals()的区别了),返回boolean类型。

⑦ str.replace(char oldChar, char newChar):将字符串中匹配odChar的字符全部替换成新的newChar字符,返回新的字符串。

⑧ str.subString(int begin),截取字符串中某一段字符,从下标begin开始,截取到最后,

str.subString(int begin, int end),截取字符串中某一段字符,从下标begin开始,到end-1结束,返回的是一个新的字符串。

⑨  str.split(String regex): 参数regex为一个字符串规则,以regex所表示的字符串为分隔符,将字符串拆分成字符串数组。

其中,regex所表示的字符串不被保留,即 不会存到字符串数组中,可理解为被一刀切,消失!

⑩ str.trim(),去掉字符串前后两端的空格,返回新的字符串。



案例1:

结果:



2. StringBuilder、StringBuffer类

String类我们已经得知,它是不变对象,那么每当对内容修改时都会引发新对象的创建。那么当我们有一个需求是需要频繁修改字符串时,这样不仅不能减少内存的开销,返回会增加内存的开销。为此java为我们提供了一个专门用于修改字符串内容的类StringBuilder类, 该类封装了可变的字符串,换句话说,当我们需要改变字符串内容时,并不会创建新对象,而是在原对象基础上进行修改。从而减小了内存的开销。

StringBuilder类的常用方法有:

append(String str):追加字符串;

insert (int index,String s):从指定下标位置插入字符串;

delete(int start,int end):从起始下标删除字符串到end结束下标,end要大于等于start,可以超出数组总长度;

replace(int start,int end,String str): 替换字符串;

reverse():字符串反转。



案例2:

结果:可以看出效率方面对比性很强。



案例3:

结果:



StringBuffer类,是JDK早期的版本,StringBuffer是线程安全的可变字符序列。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。

通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。只要发生有关源序列(如在源序列中追加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源上实现同步。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。

从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 java.lang.StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

时间: 2024-10-13 22:01:43

Java核心API -- 2(String、StringBuilder、StringBuffer)的相关文章

String StringBuilder StringBuffer 区别

String StringBuilder StringBuffer 区别: String 字符串常量 (可用于少量数据,变化不大的情况) 最慢 不可变类(每次改变都会引起创建新的String类) StringBuffer 字符串变量 线性安全(可多线程使用) 居于中间 可变类 StringBuilder 字符串变量 非线性安全(不支持并发操作,可单线程使用) 最快 可变类

四:Java之字符串操作String、StringBuffer和StringBuilder

string是我们经经常使用到的一个类型,事实上有时候认为敲代码就是在重复的操作字符串,这是C的特点,在java中.jdk非常好的封装了关于字符串的操作.三个类String .StringBuffer . StringBuilder .这三个类基本上满足了我们在不同情景下使用字符串的需求. 一.String JDK的解释是 "Strings are constant; their valuescannot be changed after they are created"也就是说St

Java学习笔记之String、StringBuffer和StringBuilder

更多博文可参考我的个人博客:贱贱的梦想 基本概念 String:此类代表字符串常量,它们的值在创建之后不能更改. StringBuffer:是一个线程安全的可变字符序列,它与String一样,在内存中保存的都是一个有序的字符串序列(char类型的数组),不同点是StringBuffer对象的值是可变的. StringBuilder:与StringBuffer类基本相同,都是可变字符串系列,不同点是StringBuilder是线程不安全的. 分析 简单的说,String类型和StringBuild

java面试题String,StringBuilder,StringBuffer

面试的经历中,相信大家都经常被问到这三者的区别,说到String我相信绝大多数的人都会说:"String是不可变的,final修饰的",你会看到面试官微微猥琐一笑,接着问到:"final修饰的类就是不可变的吗,那StringBuilder和StringBuffer不是final修饰的?" 1. 先来说说String 看下JDK1.7 String成员变量的源码 /** * @author Lee Boynton * @author Arthur van Hoff *

Java学习(二):String、StringBuffer和StringBuilder

String类是final的,String类其实是通过char数组来保存字符串的.对String对象的任何改变都是重新生成新的对象,原对象不动. 1)对于直接相加字符串,效率很高,因为在编译器便确定了它的值,也就是说形如"I"+"love"+"java"; 的字符串相加,在编译期间便被优化成了"Ilovejava". 对于间接相加(即包含字符串引用),形如s1+s2+s3; 效率要比直接相加低,因为在编译器不会对引用变量进行优

Java String, StringBuilder, StringBuffer

整理自stackoverflow: Mutability Difference: String is immutable, if you try to alter their values, another object gets created, whereas StringBuffer and StringBuilder are mutable so they can change their values. Thread-Safety Difference: The difference

String Stringbuilder Stringbuffer的区别

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以

java基础4:String与StringBuffer及基本数据类型包装类

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(转)String StringBuilder StringBuffer 对比 总结得非常好

来源:http://blog.csdn.net/clam_clam/article/details/6831345 转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了.嘿嘿.... 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却不是普通