第五个七天内容知识记录

1、String的特性
①String是一个final类,是不可变的字符序列(当对字符串进行操作时,需要重新定义一个区域的值,不能够对原来的区域内容进行修改)
②内部定义了final类型的char型数组,用于存储字符串数据
③String字面量的定义方式,声明的字符串值存放在字符串常量池中
④字符串常量池是不会存储相同内容的字符串
在这里插入图片描述
2、String实例化的方式
①通过字面量定义的方式:生成的变量指向字符串常量池中
②通过new+构造器的方式:生成的变量指向堆中
在这里插入图片描述
3、字符串生成结果位置

String s1 = "hello";
String s2 = "world";

String s3 = "helloworld";
String s4 = "hello" + "world";
String s5 = s1 + "world";
String s6 = "hello" + s2;
String s7 = s1 + s2;

String s8 = s5.intern();
String s9 = (s1 + s2).intern();

System.out.println(s3 == s4);//true
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false
System.out.println(s5 == s7);//false
System.out.println(s5 == s7);//false
System.out.println(s6 == s7);//false

System.out.println(s3 == s8);//true
System.out.println(s3 == s9);//true

如果声明等号右边是有变量名存在的,那么编译就会在堆中进行,结果也就生成在堆中;
如果声明等号右边单纯是字符串或字符串(常量)拼接,那么编译在常量池中及进行,结果就生成在常量池中;
如果声明等号右边变量使用了intern()方法,那么结果也生成在常量池中
如果变量是final修饰的,那么编译会在方法区中,是两个常量的拼接,那么结果也就在常量池中

一旦String类型变量调用了intern方法,那么就一定会返回在常量池的地址值

4、字符串常量池在JDK不同版本的位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5、String的常用方法
int length():返回字符串的长度
char charAt(int index):返回字符串对应位置的char型字符 return value[index];
boolean isEmpty():判断字符串是否为空(长度是否为0) return length == 0;
String trim():返回去除原先字符串首末位置空格的字符串
boolean equals(Object obj):判断两个字符串内容是否相同
boolean equalsIgnoreCase(String anotherString):忽略大小写判断字符串内容是否相同
String concat(String str):等价于“+”的作用,拼接字符串
int compareTo(String anotherString):判断两个字符串大小(将每一个字符进行相减运算,求出总和)
String subString(int beginIndex):返回一个新的字符串,从beginIndex开始截取
String subString(int beginIndex, int endIndex):返回一个新字符串,从beginIndex开始,endIndex-1结束
boolean contains(CharSequence s):判断字符串中是否存在指定char值序列
int indexOf(String str):返回子字符串第一次在字符串中出现的索引位置
String replace(char oldChar, char newChar):返回一个替换了oldChar后的字符串
String replace(CharSequence target, CharSequence replacement):返回替换了原来字符串中所有非target字符串的新字符串

6、String的转化
String与字符数组(char[])的转化:
String转化为char[]:String调用toCharArray()方法
char[]转化为String:将char[]放入String创建对象的构造器中
String与字节数组(byte[])的转化:
String转化为byte[]:String调用getBytes()方法
byte[]转化为String:将byte[]放入String创建对象的构造器中

7、StringBuilder和StringBuffer
StringBuffer:可变的字符序列;线程安全,效率
StringBuilder:可变的字符序列;线程不安全,效率高;JDK5.0后新增的

StringBuffer/StringBuilder的创建:按给出的字符串的长度加上16的大小创建char[]数组
StringBuffer/StringBuilder的扩容:先判断原有的数组加上新添数组长度之和是否大于16,若大于,则扩容;默认情况下扩容为原来长度2倍+2,同时将,原有的数据复制到新的数组中

常用方法
append(String str):用于加入字符串/字符/数字进行拼接
delete(int start, int end):删除指定位置的字符/字符串(不包括end位置的)
replace(int start, int end, String str):替换指定位置的内容(不包括end位置的)
insert(int offset, String str):在指定位置插入内容
reverse():当前字符串逆转
int indexOf(String str):返回str首次在字符串中出现的位置

8、String、StringBuffer、StringBuilder效率
StringBuillder > StringBuffer > String

9、StringBuffer或StringBuilder使用append()方法,如果添加的字符串是null的话,输出的结果也会是"null"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值