一、本章要点
- 字符串类String
- String/StringBuilder/StringBuffer
- 文本I/O(PrintWrite/Scanner)
1.字符串类String
String类有11个构造方法以及40多个方法,这些方法用于检验序列中的单个字符、比较字符串、查找子串、提取子串、将全部字符串转换成大写或小写的新字符串等。1
2
3
4
5String str1 = new String("四月是你的谎言");
String str2 = "四月是你的谎言";
char[] charArray = {'四','月','是','你','的','谎','言'};
String str = new String(charArray);
str1 == str2 返回false;因为两者指向不同的对象->堆区内存地址
str1.equals(str2) 返回true;因为两者具有相同的字符序列->equals重写
String对象是不可变的,它的内容不能改变。
String s= “Java”;
s= “HTML”;
第一条语句创建了一个内容为“Java”的String对象,并将其引用赋给s。第二条语句创建了一个内容为“HTML”的新String对象,并将其引用赋给s。赋值后第一个String对象(“Java”)仍然存在,但是不能再访问它,因为变量s指向了新的对象。
String类还有以下常用API:
- 长度以及提取单个字符 length/charAt
- 字符串连接 concat/+
- 提取字串 substring
- 字符串转换 replace/toLowerCase/toUpperCase/trim
- 与数组之间转换 “abc”.toCharArray()/String.valueOf(new Char[]{‘a’,’b’,’c’})
- 与数值之间转换 Integer.paresInt(str)
2.String/StringBuilder/StringBuffer
使用下面这段代码描述了String的创建过程:1
2String str="abc";
String str="abcde";
- 效率
首先创建一个String对象str,并将”abc”赋值给str,然后JVM又创建一个新对象也名为str,最后将原来的str的值+”de”再赋值给新的str变量,原来堆区的”abc”没有被引用会被GC回收。StringBuilder/StringBuffer的对象是变量,对字符串操作很少进行垃圾回收和对象创建,所有效率快(StringBuilder>StringBuffer>String)。 - 线程安全性
StringBuilder是线程不安全的,StringBuffer中很多方法都使用synchronized修饰,保证线程是安全的。 - 总结
所以String适合少量字符串操作;StringBuilder适合单线程下在字符串缓冲区进行大量字符串操作;StringBuffer适合多线程下在字符串缓冲区进行大量字符串操作。
3.文本I/O(PrintWrite/Scanner)
1 | PrintWriter output = new PrintWriter(filename); |
如果文件不存在,调用构造方法new PrintWriter(String filename)创建一个新的文件;如果文件已经存在,那么文件中当前存在的内容将被删除。
1 | Scanner input = new Scanner(System.in); //从控制台进行标准输入 |
本文链接: http://www.xiaopeng.pro/articles/bee59fea.html
版权声明: 本原创文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!