String以及两种创建方法
String的对象创建之后不能被改变。
我们创建了两个字符串变量并进行打印;在这里一共有三个字符串;1.name 2.love 3.控制台输出的字符串。(这也是String的一个弊端)。
简而言之就是字符串拼接形成了一个新的字符串。
直接赋值创建:
我们以 String 变量名 = 内容 直接进行创建
如果两个变量名称不同但是内容相同时
运行方法后 代码走到第一行的时候。会根据一个地址值在堆区里的StringTable(串池)找到字符串,当走完第二行代码时还是用同样的地址去堆区里的StringTable(串池)找字符串。我们把这种现象称之为(复用)。
小结:当我们使用双引号直接赋值的时候,系统会检查字符串在串池是否存在。
不存在:创建新的。
存在:直接复用。
New创建
这种情况不会有复用的出现,s1,s2分别的到一个地址去得到abc,所以我们一般都会使用第一种方法。
字符串的比较:
==
首先进行比较我们肯定会想到==。
但是==对于基本数据类型会直接比较数值。
引用数据类型会比较地址值。
这就是s1和s2的数据都是字符串“abc”;但是返回值是false的原因。
eauals方法
所以为了更好的比较,我们要了解可以直接比较数据的equqls方法
equals的返回值是布尔类型,如果数据相同则返回true 反之返回false
equalsIgnoreCase 则忽略英文的大小写进行比较。
举个栗子就会更好的了解
StringBuilder
String的劣势 先看代码
这个字符串的拼接,每循环一次都要创建一个新的字符串(因为自串创建以后就是不可变的),非常的麻烦,并且占用内存,而我们所理解的拼接就是一个字符串从一个a 一直到十一个a。所以我们引入StringBuider。
StringBuider可以看作为一个容器,创建以后是可变的。所以在拼接的时候不需要创建新的字符串来接收。最终目的就是提升代码的运行效率。
两种创建方法:
StringBuilder的四种常见方法。
append()
直接添加,并返回对象本身
注意此时s1不是字符串而是StringBuilder,在我们打印的时候自动帮我们转换为字符串
toString()
我们对上述代码进行改进。使用toString变得更加规范
length()
对字符串内的字符的个数进行计算返回int类型
severse()
reverse()方法可以把字符串反转,返回类型依旧是StringBuilder
StrinJoiner
两种创建方法
三种成员变量add()只能添加字符串;
toString()转化为字符串;
length()返回长度(字符出现的个数)