java的String类的总结


String类


1.实例化方式
直接赋值

String str = "hello";

构造方法赋值

String str = new String("hello");

两种实例化方式的区别

  • 直接赋值:在JVM内部会维护一个字符串常量池(对象数组),目的是减少开销。若采用直接赋值的方式进行String类的实例化操作,那么该对象会自动保存到对象池之中。若下一次继续使用直接赋值的方式实例化String对象,先在对象池中寻找是否有指定内容对象,若有,直接引用。否则创建新空间,将新对象入池以供下次使用。
  • 构造方法:当使用构造方法实例化字符串时,实际上会开辟两次空间;实例化后的对象并不会保存到对象池之中,可以使用intern()方法来手工入池

2.字符串的相等比较
"=="操作符用于比较两个变量的值是否相等,对于基本类型而言,比较的就是数值大小;对于引用类型而言,比较的实际上是保存的地址是否相等而不会比较内容。

所以在字符串内容比较时,需要使用String类提供的equals()方法,它区分大小写;equalsIngoreCase()不区分大小写比较。

str1.equals(str2);

3.String类的匿名对象(没起名字的对象)
所有字符串常量""都是String类的匿名对象。

在比较字符串是否等于特定字符串时,将字符串常量写在equals前,通过字符串常量来比较。

"hello".equals(str);

4.字符串常量不可变更:堆中常量的值无法修改,但是栈中的指向可以更改

字符串不要改变太多次,慎用"+"(防止产生垃圾空间)。

5.字符与字符串的相互转换

char[]->String
public String(char[] value) : 将字符数组全部转为字符串
public String(char[] value,int offset,int len) : 将字符数组的部分内容转为字符串

String->char
public char charAt(int index) : 取得字符串指定索引的字符,从0开始

String->char[]
public char[] toCharArray() : 将字符串转为字符数组

6.字节与字符串的相互转换
字节用在二进制流与网络传输中。

byte[] -> String
public String(byte[] value) : 将字节数组全部转为字符串
public String(byte[] value,int offset,int len) : 将字节数组的部分内容转为字符串

String -> byte[]
public byte[] getBytes() : 将字符串转为字节数组
public byte[] getBytes(String charSet) : 将字符串按照指定编码格式转为字节数组
不同的操作系统有不同的编码格式,linux默认编码为UTF-8,windows默认编码为GBK。

7.String与基本类型的相互转换

String -> 基本类型
使用各个包装类提供的parseXX(),eg:Integer.parseInt(str)
当字符串中包含了非数字,在运行时会抛出NumberFormatException

基本类型->String
“+”
通过String的构造方法
推荐:使用String.valueOf(所有基本类型)

8.字符串比较方法
比较相等:equals、equalsIngoreCase

比较大小:public int compareTo(String anotherString) : 比较两个字符串的大小关系

按照ASCII码比较,只要发现不相等的内容算出差值直接返回,不会继续向下查找。

9.字符串查找
在这里插入图片描述
10.字符串替换
public String replaceAll(String regex,String replacement) : 将字符串中所有指定内容替换为新内容

public String replaceFirst(String regex,String replacement) : 替换首个内容

11.字符串拆分
public String[] split(String regex) : 按照指定格式将字符串全部拆分。
public String[] split(String regex,int limit) : 将字符串部分拆分,数组长度为限定limit长度。

13.字符串截取
public String substring(int beginIndex) : 从指定索引开始截取到字符串结尾。
public String substring(int beginIndex,int endIndex) : 从指定索引开始到指定结束位置。

13.其他方法
在这里插入图片描述
14.StringBuffer与StringBuilder
StringBuffer:为了方便进行字符串内容的修改。
字符串拼接使用append()方法。

StringBuffer与String的相互转换
String -> StringBuffer:
通过StringBuffer的构造方法:public StringBuffer(String str)
通过append(String str)

StringBuffer -> String:
调用StringBuffer的toString();

StringBuffer的独有方法:
字符串反转:reverse()
删除指定位置字符串: delete(int start, int end)
在指定位置插入任意元素:insert(int offset, 各种数据类型 )

StringBuilder与StringBuffer的用法基本相同。

String与StringBuffer、StringBuilder的区别?

1.String常量内容不可修改,而StringBuffer与StringBuilder的内容可以修改;
2.StringBuffer使用同步处理,线程安全,性能较低;StringBuilder使用异步处理,线程不安全,性能较高。
在普遍场景下,推荐使用StringBuilder。当String对象使用"+"进行字符串拼接时,javac编译器会将String对象变为StringBuilder而后调用append()来修改字符串内容,减少无用空间的开辟。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值