【Java基础常用类】String、StringBuffer、StringBuilder用法与注意事项

String

理解和创建对象

在这里插入图片描述在这里插入图片描述

  • Serializable 说明String可以串行化
  • Comparable 说明String对象可以比较

说明

  • String对象用于保存字符串,也就是一组字符序列
  • "jack"字符串常量,双引号括起的字符序列
  • 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
  • String 类有很多构造器,构造器的重载
    在这里插入图片描述
  • String类实现了接口 Serializable 【String 可以串行化:可以在网络传输
  • 实现了接口 Comparable [String 对象可以比较大小]
  • String是final类,不能被继承
  • String有属性 private final char value[];用于存放字符串内容
  • 一定要注意:value是一个final类型,不可以修改。这里指的是地址不可修改。值可以修改
  • 即value不能指向新的地址,但是单个字符内容是可以变化

两种创建方式

在这里插入图片描述
在这里插入图片描述
String的内存布局
在这里插入图片描述
下面来一段代码看看实际情况
在这里插入图片描述
可以知道以下结论

  • String内部重写了equals方法。
  • 用直接赋值创建的String其实是同一个东西,内容相同,地址相同
  • 用==不相等的原因就是地址是不同的。堆中的String保存了指向常量池字符串的地址。

intern方法

在这里插入图片描述
在这里插入图片描述
说简单一点,就是返回堆中String保存的常量池中字符串的地址,就是String的内存布局图里面,返回OX99

##测试题
在这里插入图片描述
这里需要注意的是。p1.name==p2.name实际上是相同的

字符串特性

在这里插入图片描述

创建了两个字符串常量对象


在这里插入图片描述


String a="hello";
String b="good";
String c=a+b;
String d="hello"+"good";
  1. 先创建一个StringBuilder sb = StringBuilder()
  2. 执行 sb.append("hello")
  3. 执行 sb.append("good")
  4. 执行`sb.toString()
  • 其实是c指向堆中的对象(String) value[ ] ->池中"helloabc"
  • 一共创建了三个对象
  • 注意 String c=a+bString c="hello"+"good"创建方式不同
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

最后的输出结果为:hspandhava

常见方法

说明

在这里插入图片描述

常见方法1

  • equals(str) 区分大小写,判断内容是否相等
  • equalslgnoreCase(str) 忽略大小写的判断内容是否相等.
  • length()获取字符的个数,字符串的长度
  • indexOf(char) 获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1
  • indexOf(str) 获取子串在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1。lastIndexOf用法相同
  • lastIndexOf(char)获取字符在字符串中最后1次出现的索引,索引从0开始,如找不到,返回-1
  • substring(start,end)截取指定范围的子串,左闭右开[start,end)
  • substring(index)从索引index开始截取后面所有的内容,包括index
  • trim() 去前后空格
  • charAt:获取某索引处的字符,注意不能使用Str[index](即数组的方式)这种方式.

常见方法2

  • toUpperCase() 将字符串中的字符全变成大写

  • toLowerCase() 将字符串中的字符全变成小写

  • concat(str) 拼接字符串,可以链式。比如s1 = s1.concat("林黛玉").concat("薛宝骊").concat("together");

  • replace(oldstr,newstr) 替换字符串中的字符。把字符串中所有oldstr替换成newstr。这里注意,s1.replace()方法执行后,返回的结果才是替换过的,原来数组未发生改变
    在这里插入图片描述

  • split(str)分割字符串,以str为标准对原字符串分割,对于某些分割字符,我们需要转义比如 | \\等。在对字符串进行分割时,如果有特殊字符,需要加入转义符\
    在这里插入图片描述
    在这里插入图片描述

  • compareTo(str) 比较两个字符串的大小。如果前者大,返回正数,后者大返回负数,相等返回0。根据ASCII表对每一个字符进行判断的。

  • toCharArray() 转换成字符数组

  • format格式字符串,%s字符串 %c字符 %d整型 %.2f 浮点型表示保留两位小数并且进行四舍五入的处理(称为占位符)案例,将一个人的信息格式化输出。复用性很高
    在这里插入图片描述


StingBuffer

基本介绍

在这里插入图片描述
在这里插入图片描述

解读

  • StringBuffer 的直接父类是AbstractStringBuilder
  • StringBuffer实现了 Serializable,即StringBuffer的对象可以串行化
  • 在父类中 AbstractStringBuilder有属性 char[] value ,不是final.该value数组存放字符串内容,引出存放在堆中的
  • StringBuffer是一个final类,不能被继承
  • 因为StringBuffer字符内容是存在char[] value,所有在变化(增加/删除)不用每次都更换地址(即创建新对象)

String和StringBuffer

在这里插入图片描述
如果用StringBuffer进行字符拼接,速度要比String快很多

StringBuffer的构造器

在这里插入图片描述

通过给一个String 创建StringBuffer ,char[]大小就是 str.length() +1

String和StringBuffer互相转换

在这里插入图片描述

常用方法

在这里插入图片描述

说明

  • append
    在这里插入图片描述
  • delete(start,end)删除下标为start到end的字符,不包括end。[start,end)
  • replace(start,end,str)使用str替换索引为[start,11)的字符
    在这里插入图片描述
  • insert(index,str)在索引为index的位置,插入str,原来索引为index的内容自动后移

注意事项

先看一个截图
在这里插入图片描述
底层调用的是 AbstractStringBuilder 的appendNull。其中appendNull方法会把null直接转化成"null"字符串。append的参数里不能写为null,str=null的时候也不能.length,会报错。


另一个截图
在这里插入图片描述
String str=null;
StringBuffer sb2=new StringBuffer(str);
这里是StringBuffer的构造方法,这里是直接用了str.length,但是传入的str是null,直接报空指针异常!


StringBuilder

基本介绍

在这里插入图片描述
这里有两个注意点

  • 一个是线程不同步,文中说的是不保证同步。
  • 速度比StringBuffer快,重载了方法可以接受任意类型的数据

在这里插入图片描述


常用方法

在这里插入图片描述
串行化(对象可以网络传输,可以保存到文件)
在这里插入图片描述

三者的选择

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值