String字符串
字符串的定义
定义
- 字符串是一个字符序列,例如:“Hello”字符串,必须包含在一对双引号当中;
- 不是一个基本数据类型,是一个引用类型(类)
- 字符串是一个不可变类型(Immutable)
- 一经创建不可修改
构造方法
- public String()
- public String(String original)
- public String(char[] value)
- public String(byte[] bytes)
- 实例
- StringConstructorTest.java
注:声明的字符串变量必须经过初始化才能使用,否则编译器会报“变量未被初始化错误”;java中一句相连的字符串不能分开两行来写,除非用”+”来连接;
**
来来来~~~直接上代码
**
代码GTQ28已经做了一些笔记,请认真分析。
Ⅰ
Ⅱ
Ⅲ
Ⅳ
练一练
public class test {
public static void main(String[] args) {
String s1="北京";
String s2="中国首都";
String s3="北京中国首都";
String s4=s1+"中国首都";
String s5="北京"+s2;
String s6=s1+s2;
String s7="北京"+"中国首都";
final String s8="北京";
String s9=s8+"中国首都";
System.out.println(s3 == s4);
System.out.println(s3 == s5);
System.out.println(s3 == s6);
System.out.println(s4 == s5);
System.out.println(s5 == s6);
System.out.println(s6 == s7);
System.out.println(s3 == s7);
System.out.println(s3 == s9);
}
}
答案:
false
false
false
false
false
false
true
true
上面的题目自己能够一个不错的做出来,而且能说出每个的答案的来由,那你对字符串的“一经创建,不可修改”这一概念的理解就算过关了。那我们继续往下学习吧…
常用方法
取字符串的长度
- length()
取某个索引位置上的字符
- charAt(int index);
子字符串
-
substring(4);从指定位置截取到末尾;
-
substring(0,4);指定开始位置和结束位置,包含前面的索引,不包含后面的索引;
字符串连接
- “+”:不仅可以连接两个字符串,同时也可以连接 其他基本数据类型,这时会将这些数据类型直接转换为 字符串;例如:String str = “1+2”;输出字符串str,得到 的结果就是:1+2,而不会是3;
字符串的编码转换
StringTokenizer工具类
解析字符串工具类StringTokenizer
- StringTokenizer 是一个解析字符串的工具类,
根据指定的分隔符分隔指定的字符串;实例:NewStringDemo.java
StringBuffer和StringBuilder
三者的区别
StringBuffer和StringBuilder的区别
- 程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类,执行效率更高;如果要保证线程安全,自然就选择StringBuffer。
- 注:StringBuilder相对Stringbuffer的效率要高,工作中推荐使用它,线程不安全会有安全隐患吗?不会,线程安全问题应该交给程序本身来控制,而不是交给工具类来完成。
String和StringBuffer和StringBuilder的区别
- StringBuffer、StringBuilder和String一样,也用来代表字符串。
- String类是不可变类,任何对String的改变都会引发新的String对象的生成;
- StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。
- StringBuffer和StringBuilder类的区别也是如此,它们的原理和操作基本相同,区别在于StringBuffer支持并发操作,线性安全的,适合多线程中使用。
- StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。
- 新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。
三者的效率测试代码
public static void main(String[] args) {
//测试String、StringBufeer和StringBuilder三者的效率
String s1=new String();
long starTime = System.currentTimeMillis();
for(int i=0;i<50000;i++) {
s1+=i;
}
long endTime = System.currentTimeMillis();
System.out.println("String总运行时间:"+(endTime-starTime));
StringBuffer sf=new StringBuffer();
starTime = System.currentTimeMillis();
for(int i=0;i<50000;i++) {
sf.append(i);
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer总运行时间:"+(endTime-starTime));
StringBuilder sd=new StringBuilder();
starTime = System.currentTimeMillis();
for(int i=0;i<50000;i++) {
sd.append(i);
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder总运行时间:"+(endTime-starTime));
}
答案:
String总运行时间:6328
StringBuffer总运行时间:5
StringBuilder总运行时间:3
理解
其他
其他:String.format(“%.2f”,num);保留两位小数
结束语
谢谢