String类,String类的特点
记录一下自己面试前,对于String类的一些知识点的整理,希望整理出来的知识能对大家有用
#1、了解String类
1.String类是被final修饰的,是不能被继承的
2.String类底层使用数组结构
jdk9以前使用的是char[]
jdk9以后使用的是byte[]
3.String的对象一旦创建就不能修改
底层维护了一个字符串常量池,实现共享
注意:String类的对象每次修改都会产生一个新的对象
2、String对象的拼接
1.常量池中的字符串常量 + 常量池中的字符串常量 :结果是存储在常量池中
String c = "a"+"b";
String ab = "ab";
System.err.println(ab==c); //输出true
2.变量 + 常量池中的字符串常量 : 结果是存储在堆中的
String a = "a";
String c = "a"+"b";
System.err.println(c==a+"b"); //输出false
3.如果拼接结果调用intern()方法,返回值就在常量池中
String a = "a";
String b = "b";
String c = "a"+"b";
System.err.println(c==a+b); //输出false,证明String类的拼接中只要有一个是变量,结果就存在堆中
String a = "a";
String b = "b";
String c = "a"+"b";
System.err.println(c==(a+b).intern()); //输出true,说明如果拼接结果调用intern()方法,返回值就在常量池中
3、String对象的比较
1. == 比较地址值
2. equals()比较的是值本身,区分大小写
String a = "a";
String d = "ab";
System.out.println(d.equals(a+"b")); //返回true
System.out.println(d.equals(a+"B")); //返回false
4、 equalsIgnoreCase() 比较的也是值本身,但是不区分大小写
String a = "a";
String d = "ab";
System.out.println(d.equals(a+"b")); //返回true
System.out.println(d.equalsIgnoreCase(a+"B")); //返回值也是true