java.lang.String类代表字符串.java中所有的字符串文字都可以看做是此类的实例.
特点:
1.字符串的值再创建后不能被修改.String类的内部是一个final修饰的byte[]在存储数据,一旦被初始化后,值就不能被修改.
2.相同的常量字符串可以共享.用常量给字符串变量赋值的时候,会先去查找常量区有没有这个字符串常量,有的话会把该字符串常量的地址值赋值给变量,也就是两个变量存储的是同一个对象的地址值.常量区没有字符串对象,才会创建一个字符串对象.
Constructor:
String() 创建一个空字符串对象
String(char[] chars) 通过参数的字符数组来构造新的String
String(byte[] bytes) 使用编译器平台默认的字符集解码指定的字符数组,idea默认的字符集是UTF-8,Eclipse默认的字符集是GBK
方法:
1.判断:equals(),equalsIgnoreCase()
2.获取数据:length(),charAt(),indexOf(),concat(),subString(),
3.转换功能:toCharArray(),getBytes(),replace()
4.分割:split()
编码:使用不同的编译器,程序中的中文会按照编译器的编码把中文转换为对应的编码值.
比如,idea的默认的编码是UTF-8,Eclipse默认的编码是GBK,记事本的编码也是GBK
如果使用记事本编写java代码,代码中字符串"中国",会被转换成GBK编码中对应的数值,代码:
import java.util.Arrays;
public class GBK{
public static void main(String[] args){
//测试,本地记事本写的java程序,使用javac编译
//定义字符串,获取byte数组的值,看看是哪种编码的值
String str = "中国";
byte[] bs = str.getBytes();
System.out.println(Arrays.toString(bs));
}
}
结果:
相反的,把GBK的编码值给字节数组,转换为字符串,IDEA中只有使用GBK编码解码生成的字符串才能正确显示:
byte[] bs = {-42, -48, -71, -6};
String str = new String(bs);
System.out.println(str);//�й� messy code
str = new String(bs,"GBK");
System.out.println(str);//中国