【博学谷学习记录】超强总结,用心分享。String与StringBuilder。
一.String
1.介绍
1)使用String类时不需要导包
2)String类代表字符串,java程序中所有的双引号字符串,都是String类的对象
3)字符串不可变,他们的值在创建之后不能被更改,如有一个变量重复赋值两次,只是记录了一个新的对象,但是里面的内容并没有改变。
2.常见的构造方法
1)public String():创建一个空白字符串对象,不含任何内容
2)public String(char[] chs):根据字符串数组的内容,来创建字符串对象
3)public String(String original):根据传入的字符串内容,来创建字符串对象
注意:String类比较特殊,打印其对象名不会出现地址,而是该对象所记录的真实内容
3.String创建字符串对象的区别
1)双引号创建的字符串对象,在字符串常量池转给你存储,通过构造方法创建字符串对象,在堆内存中存储
2)通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同,比较就不同。
4.String面试题
package com.study.Test; public class StringTest { public static void main(String[] args) { String s1="abc"; String s2="ab"; String s3=s2+"c"; System.out.println(s1 ==s3);//false } }
输出为false的原因是String创建
String s1="abc";
String s2="ab";
两个的值是腰存放在字符串常量池中,但
String s3=s2+"c";
使用“+”号进行拼接,则会进入堆内存中,然后通过底层StringBuilder进行拼接,然后通过toString方法打印出字符串,因此s1和s3的地址不一样。
package com.study.Test; public class StringTest { public static void main(String[] args) { String s1="abc"; String s2="a"+"b"+"c"; System.out.println(s1 ==s2);//true } }
相等的原因是:因为在java中存在常量优化机制,在编译的时候,就会将
"a"+"b"+"c"进行拼接为“abc”;
5.String方法
1) 数组的长度:数组名.length
字符串长度:字符串对象.length()
2)将字符串拆分成字符数组
public char[] toCharArray():将当前字符串拆分为字符数组并存入数组中
3)遍历字符串,首先要能获取字符串中的每一个字符
public char charAt(int index)
4)截取字符串
string substring(int beginIndex):
从传入的索引位置处,向后截取,
一直截取到末尾,得到新的字符串并返回
string substring(int beginIndex, int endIndex)
从beginIndex索引位置开始截取,直到endIndex位置,得到新字符串返回、
二、StringBuilder
作用是提高字符串的操作效率
1)构造方法
StringBuilder:可变的字符串,可以看作是一个容器
public StringBuilder()创建一个空白可变字符串对象
public StringBuilder(String str)不含任何内容
2)成员方法
public StringBuilder append():添加数据,并返回对象本身
public StringBuilder reverse():返回相反的字符序列
public int lenght():返回长度(字符出现的个数)
public String toString():通过toString()可以实现
把StringBuilder转换成String类型
三、String和StringBuilder的区别
1,String:内容不可变
StringBuilder内容是可变的
2.String的拼接原理
StringBuilder拼接
main方法被jvm执行,SB在堆内存中占了一个空间地址,然后字符串常量中创建了常量abc,调用到堆内存中用append()方法直接拼接,效率高
四、