String类的复杂性
第一、String的定义
string是一个类并不是一个定义数据类型的修饰符
它可以这样定义
//第一种方式,直接定义
String s="abc";
//第二种方式,new出来
//参数可以是字节数组类型,会直接将二进制数组转换为字符串类型
String s1=new String();
第二、String的字符串常量池
字符串的值不可变,他们的值在创建后不能被更改
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
输出结果为:true
解析:
用两个==来比较,基本数据类型比较的是数据值,引用数据类型比较的是地址值
当使用双引号来创建字符串的时候,jdk会检查该字符串在字符串常量池中是否存在,存在就不会创建,而是直接复用。也就是说上面两个变量指向同一个地址值
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2);
输出结果为:false
解析:
new出来的string对象,会在堆内存中分配一个空间,所以上面两个变量值是一样的,但是地址值不一样
所以我们想只比较值是否一致,一般使用spring类的equals方法
第三、string类的几种常用方法![在这里插入图片描述](https://img-blog.csdnimg.cn/20201106154539473.png#pic_center)
第四、面试题
String类是否可以继承?
答:不能
原因:String类被final修饰,是最终类,无法被继承