【Java基础】Day7

String 字符串

String 类的特点

  1. Java 程序中所有双引号字待串,都是 String 类的对象。
  2. 字符串在创建之后,其内容不可更改。
  3. 字符串虽然不可改变,但是可以被共享。

字符串常量池:当我们使用双引号创建字符串对象时,会检查常量池中是否存在该数据。
不存在,创建。存在,复用。
jdk7 版本之前: String Table 是在方法区中,jdk7 版本开始: String Table被挪到了堆内存中。

面试题

在这里插入图片描述
字符串底层其实是字符数组(即是 char[])。使用构造函数创建的String对象和直接使用赋值方式创建的String对象内存空间不同。直接使用赋值会在字符串常量池中,而构造函数创建会在堆内存中。构造函数创建中一共创建了两个字符串数据,一个是形参的,一个是构造时复制的。所以比较结果为 False。
在这里插入图片描述
进行字符串变量与字符串常量加法运算时会使用 StringBuilder 类去完成,最后使用 toString 方法返回了一个 String 类型的数据地址。所以比较结果为 False。
在这里插入图片描述
可以看到字符串变量 s2 进行了字符串常量加法并复制给 s2,在 Java 的常量优化机制中,这种情况在编译的时候会变成。

String s1 = "abc";
String s2 = "abc";

所以比较结果为 True。

String 操作

内容比较方法

在这里插入图片描述
涉及到字符串变量与字符串常量使用equals比较的,最好是字符串常量使用,例如"test".equals(字符串变量)

遍历

  1. 将String转换成字符数组,进行数组遍历。
  2. 使用String提供的chatAt方法传入 index 进行遍历。

第一种方式的效率更高。
在这里插入图片描述

截取

注意截取后会返回一个新的字符串,需要新的一个遍历进行接收,即是字符串截取操作(substring方法)不会影响源字符串。
在这里插入图片描述

替换

在这里插入图片描述

拆分

注意传入的值是正则表达式。在这里插入图片描述

StringBuilder

用于调高字符串操作效率,在字符拼接操作非常多的时候应该使用StringBuilder提高效率
字符拼接操作:使用 String 类型变量拼接字符串常量操作行为。
StringBuilder 是一个可变的字符序列,而 String 不可变。StringBuilder 是字符串缓冲区,将其理解是容器,这个容器可以存储任意数据类型,但是只要进入到这个容器,全部变成字符串。在这里插入图片描述

在这里插入图片描述

StringBuilder 操作

在这里插入图片描述如果想要和String类型数据进行比较,需要使用toString方法。
在这里插入图片描述

StringBuilder 与 StringBuffer的区别

  1. StringBuilder 属于多线程。StringBuffer 属于单线程,效率会比StringBuilder低。
  2. StringBuilder在JDK1.5出现,StringBuffer在JDK1.0出现。

这两个类的方法命名一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值