String
字符串课程中的常见问题
1、 关于String类的equals()方法
在Object类型中,equals()相当于==,比较的是地址,是否为同一对象。
String类对equals方法进行了重写,比较的是所指向的对象的内容是否相等。
2、关于字符串与字节数组转换过程中使用字符编码的问题
在后面的输入输出流中我们会看到,数据在进行传输时是以二进制的格式进行的,所以会用到将字符串转换完字节数组的内容,而在转换的时候可以指定编码格式。
这里说明一下字节,字节用byte类型表示,1个字节是8个二进制位,byte类型表示的范围是-128到127之间的整数。
从字符串与byte数组间相互转换的例题可以看出,如果编码是GBK格式,则2个byte类型的数据表示一个汉字,如果编码是UTF-8格式,则3个byte类型的数据表示一个汉字。而字母和空格还是用一个字节表示。如:下面是使用UTF-8编码的情况下,字符串“JAVA 编程 基础”对应的byte数据。
charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法.
charAt()方法返回指定索引位置的char值。索引范围为0~length()-1.
如: str.charAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符.
IndexOf()和lastIndexOf()
用\转义字符可以输出”
字符串与byte数组间的转换
getBytes();方法
在UTF-8编码格式中,一个汉字用3个字节表示
字符串与byte数组之间的互相转换
==与equal方法比较
方法compareTo()比较两个字符串大小,返回值是int的值。
concat()方法介绍:
将几个字符串连接到一起。
例如:
s = s.concat(str1);//将字符串str1接到字符串s后面
s = s.concat(str2);//将字符串str1接到字符串s后面
StringBulider
官方建议用StringBuilder:
String与StringBuilder的区别及应用场景
区别:
1、 String创建后是不可以修改的,而StringBuilder是可以修改的,代码如下:
运行效果:
从结果可以看出,str+“de”并没有改变str的值,这就是字符串的不可变性,进行操作时,字符串自身的内容并没有发生变化。
再来看一下StringBuilder的使用,代码和运行效果如下:
运行效果:
可以看到StringBuilder对象的值发生了变化,从abc变成了abcde。
2、String比StringBuilder的执行效率要低,因为在运行时产生一些String对象,这样会耗费一些时间
应用场景:
如果有少量的字符串操作,可以使用String,否则使用StringBuilder