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 要快。

转载于:https://blog.51cto.com/kingkongzhao/1656611

Java核心API -- 2(String、StringBuilder、StringBuffer)相关推荐

  1. Java 集合 --- String, StringBuilder, StringBuffer

    Java 集合 --- String, StringBuilder, StringBuffer String String的声明方式 String的不可变性 对比两个String StringBuil ...

  2. String StringBuilder StringBuffer三者之间的区别~~~

    String StringBuilder  StringBuffer三者之间的区别~~~ String是字符串常量,它是典型的immutable类,被声明final class,所有的属性都是fina ...

  3. String ,StringBuilder,StringBuffer的区分

    String ,StringBuilder,StringBuffer的区分 一.区别 String是字符串常量,而StringBuffer和StringBuilder是字符串变量.由String创建的 ...

  4. String StringBuilder StringBuffer 包装类 Date 类 枚举类

    String,StringBuilder,StringBuffer直接的区别是: String 不可变长的字符序列 StringBuilder 可变长的字符序列,线程不安全的,效率较高 StringB ...

  5. 达内java文档网址_达内java核心api下.pdf

    达内java核心api下 1.请看下列代码: publicclassFoo { public staticvoidmain (String[]args)throwsException { String ...

  6. String,Stringbuilder,Stringbuffer及正则表达式

    掌握String StringBuilder StringBuffer类的区别 一.String String是不可变类,一旦String对象被创建之后,包含对象中的字符串序列都是不可改变的,直到类被 ...

  7. String , StringBuilder , StringBuffer

    String 首先从String底层看起 从底层代码被final修饰,我们能看出来,String是只读字符串,他的成员方法也都默认为final方法.所以String所引用的字符串内容不能被改变 Str ...

  8. 第五章 Java的基础类之String、StringBuffer、StringBuilder(下)

    前言 在现实世界中,既有独居动物,也有群居动物.人作为一种高等动物,是一种群居动物.群居动物都离不开家族,String类上篇中已经详细分析了它的源码实现,几乎涵盖了大部分的源码.作为一个优秀的类,它是 ...

  9. Java基础篇:String、StringBuffer、StringBuilder

    一.String: String并不是基本数据类型,而是一个被final修饰的不可变对象.通过查看JDK文档会发现几乎每一个修改String对象的操作,实际上都是创建了一个全新的String对象. 字 ...

最新文章

  1. java常用的集合对象_java常用实体类、集合类
  2. Spark 把RDD数据保存到hdfs单个文件中,而不是目录
  3. OSChina 周四乱弹 —— 画种稻画美食难画吃屎
  4. 1700 Crossing River
  5. [网络安全提高篇] 一〇六.SQL注入之手工注入和SQLMAP入门案例详解
  6. spring-note-01
  7. MYSQL中最基础的的聚合函数(重点!)
  8. 启动linux_使用 UEFI 双启动 Windows 和 Linux | Linux 中国
  9. 刚到的新公司 前任经理匆匆见了一面 飞鸽传书下载
  10. selinux + sudo +ssh +passwd
  11. dubbo源码深度解析_scrapy框架通用爬虫、深度爬虫、分布式爬虫、分布式深度爬虫,源码解析及应用
  12. POSIX定时器Timer
  13. 在Azure平台上使用托管卡进行身份认证
  14. 计算机二级python真题3和答案_计算机二级python真题:第3套综合应用题
  15. qtableiwdget优化之再优化(大批量数据加载不卡顿)
  16. 大一作业HTML网页作业:中华传统文化题材网页设计5页(纯html+css实现)
  17. 快速了解电力IEC104协议规约
  18. AssertionError: CUDA unavailable, invalid device 0 requested
  19. 推荐的接口管理平台-yapi
  20. python三维图能画地图_使用Python绘制地图的三大秘密武器

热门文章

  1. python如何选择命令_python 解析命令行选项
  2. 一套完整的java程序_编写一个完整的Java Application 程序
  3. unity3d 不规则外发光描边_Shader案例之内发光和边缘泛光效果
  4. python 图片地址_python解码data:image开头的图片地址
  5. qsettings mysql_qt连接mysql
  6. 华科计算机考研2022年分数线,2022年华中科技大学软件工程考研分数线、参考书、上岸前辈初复试经验...
  7. 文件输出 java_用Java读写文件(输入/输出)-教程
  8. 将图片处理成圆形_如何把图片批量处理成指定/固定的文件大小/体积以内?
  9. 大专计算机系毕业课题6000字,计算机理论论文6000字:高校科研.doc
  10. liferay mysql driver_Liferay更改数据库(oracle,mysql)