String
1)Java中定义好的一个类,定义在java.lang包中,为java.lang.String,使用时不需要引入包。
2)Java程序中所有字符串文字均为此类的对象,字符串对象的值创建后不可更改
3)创建String对象的两种方式:直接赋值 或 new 对象

//直接赋值
String str = “abc”;
//空字符串
String str2 = new String();
//传递字符数组,new字符串对象
char[] chs = {'a','b','c'} 
String str3 = new String(chs);
//传递字节数组,new字符串对象
byte[] bys = {97,98,99}
String str4 = new String(bys);

4)比较
基本数据类型比较的是数据值,引用数据类型比较的是地址值

String 直接赋值,用==号比较,结果为true
 new String对象,用==号比较,结果为false
 boolean equals方法,比较字符串的值,需完全一致
 boolean equalsIgnoreCase方法,比较字符串的值,忽略大小写


5)其他方法

public char charAt(int index) 根据索引返回字符
 public int length() 返回字符串的长度
 string substring(int beginIndex, int endIndex) 截取字符串,包左不包右
 string substring(int beginIndex) 截取到结尾

StringBuilder
1)可看作是一个容器,创建之后内容是可变的
2)常见方法

public StringBuilder append(任意类型) 添加数据到容器中
 public StringBuilder reserve() 反转容器中的内容
 public int length() 返回长度
 public String toString() 将StringBuilder转换成String

StringJoiner
1)jdk8出现的,可看作是一个容器,创建之后内容是可变的
2)构造方法

public StringJoiner(间隔符号) 创建StringJoiner对象,并指定拼接时的间隔符号
 public StringJoiner(间隔符号, 开始符合, 结束符号)


3)成员方法

public StringJoiner add(数据) 添加数据,返回StringJoiner对象
 public int length() 返回长度
 public String toString() 将StringJoiner转换成String
StringJoiner sj = new StringJoiner(",");
sj.add("a").add("b").add("c") //输出sj是 a,b,c

StringJoiner sj2 = new StringJoiner(",","{","}");
sj2.add("a").add("b").add("c") //输出sj是 {a,b,c}

字符串拼接的底层原理
1)如果没有变量参与,都是字符串直接相加,编译之后就是拼接的结果,会复用串池中的字符串。
2)如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存。

public class Test{
	public static void main(String[] args){
		String s1 = "abc";
		String s2 = "ab";
		String s3 = s2+"c";
		String s4 = "a"+"b"+"c";
		System.out.println(s1 == s3); //false,因为s3有变量相加,会创建新的字符串
		System.out.println(s1 == s4); //true, s4没有变量参与,会复用已存在的字符串,与s1地址一样
	} 
}

字符转换成int型

char ch = str.charAt(i);
int n = ch -48;  //48代表字符‘0’

修改字符串内容
1)使用subString截取

String s = "abcd";
char ch = s.charAt(0); //拿到第一个字符
String se = s.subString(1); //拿到从1开始的字符串至结尾
return se + ch; //拼接成新的字符串

2)将字符串变为字符数组,操作完再将其转化为字符串

String s = "abcd";
char[] cs = s.toCharArray();
char first = cs[0]; //拿到第一个字符
for(int i = 1; i < cs.length; i++ ){
	cs[i-1] = cs[i]; //将后面的字符依次前移
}
cs[cs.length-1] = first; //将第一个字符放到最后
String str = new String(cs); //创建新字符串
return str;