java的String工具类

String类表示字符串,Java程序中所有字符串文字都实现为此类的实例。

字符串是不变的,他们的值在创建后无法更改。字符串缓冲区支持可变字符串。因此String对象是不可变的,所有可以共享他们。例如:

String str =“abc”;

相当于:
char data[ ]={ ‘a’,‘b’,‘c’};
String str = new String(data);

字符串常量池

方法区,又称永久代,又称非堆区。
方法区是被所有线程共享。
所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。
简单说,所有定义的方法的信息都保存在该区域,辞去属于共享区间。
这些区域存储的是:静态变量+常量+类信息(构造方法/接口定义)+运行时常量池。
以上,只是逻辑的定义。在Hotspot中,方法区仅仅是逻辑上的独立,实际上还是包含在java堆中,也就是说,方法区在物理上属于java堆区的一部分,而永久区就是方法的实现

2.堆
一个JVM实例中只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行。

堆 在逻辑上分为三部分:

新生代
老生代
永久代

方法区的演变:
方法区演变

String

常见方法:

char charAt(int index) 返回索引处的char值
int codePointAt(int index) 返回指定索引处的字符(Unicode代码点)
int codePointBefore(int index)返回指定索引之前的字符(Unicode代码点)
int compareTo(String anotherString) 按字典顺序比较两个字符串 如果为0 表示相同 正数就是更大
int compareToIgnoreCase(String anotherString) )按字典顺序比较两个字符串,并忽略大小写的差距
String concat(String str)将指定的字符串连接到此字符串的末尾(我们常常用加号来代替)
boolean contains(CharSequence s)当且仅当此字符串包含指定的char值序列时,才返回true 其中CharSequence是String的父类

StringBuffer

线程安全

StringBuilder

线程不安全

为什么会有它俩的产生呢?其实是因为String类型的数组进行+号拼接的时候,会产生大量的内存垃圾,因此我们可以新造一个长度为16的数组去接收,当满了之后进行动态扩容。这俩是字符串缓冲区,字符串缓冲区类似于String ,但可以进行修改。每个字符串构建器都有容量。 只要字符串生成器中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区。 如果内部缓冲区溢出,它会自动变大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值