java字符串类简单介绍

1、String类

String是一个final类,代表可变的字符序列

String 对象的字符内容是存储在一个final字符数组 value[] 中的。
方法区(含字符串常量池)
JDK1.8中字符串常量池和运行时常量池逻辑上属于方法区,但是实际存放在堆内存中,因此既可以说两者存放在堆中,也可以说两则存在于方法区中,这就是造成误解的地方。
2、string的创建
方式一:
通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。字符串常量池中不会存储相同内容的字符串。

方式二:使用new

在内存中创建了两个对象,一个是在堆空间new的,另一个是char【】对应的常量池中的数据。

 

3、字符串拼接

结论:

常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
只要其中有一个是变量,结果就在堆中
如果拼接的结果调用 intern() 方法, 返回值 就在常量池中
加final的string就是常量
 
注意:函数参数是string类型是,虽然传递的是地址值,但是不能改变string的值。
上面的语句在字符串常量池中不存在“ab”。
4、string的转换
字符串 -> 基本数据类型、包装类
例如:Integer包装类的public static int parseInt(String s)

基本数据类型、包装类 ->字符串 

调用String类的public String valueOf(int n)可将int型转换为字符串

注意:ByteShortLongFloatDouble用法类似。

字符串 -> 字符数组

public char[] toCharArray()将字符串中的全部字符存放在一个字符数组 中的方法。

字符数组 -> 字符串

String 类的构造器:String(char[]) String(char[]int offsetint length) 分别用字符数组中的全部字符和部分字符创建字符串对象。

字符串 -> 字节数组

public byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

字节数组 -> 字节串

String(byte[])通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

注意:字节就是纯数了.编码与解码的字符集需要一致。

5、StringBuffer

三个类底层都是使用char【】存储。

可变的字符序列,作为参数传递时,方法内部可以改变值。是线程安全的。

StringBuffer类不同于String,其对象必须使用构造器生成(使用new)。有三个构造器:

StringBuffer() :初始容量为 16 的字符串缓冲区
StringBuffer(int size) :构造指定容量的字符串缓冲区
StringBuffer(String str) :将内容初始化为指定字符串内容
当添加的数据乘不下了怎么扩容:扩容为原来一倍加上2 (16*2+2) 。还不够的话直接用新的字符串的容量。

6、StringBuilder

可变的字符序列,作为参数传递时,方法内部可以改变值。是线程不安全的。

方法和stringbuffer类似。

三者效率:StringBuilder>StringBuffer>String

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值