1.String类
1.1什么是String类
针对字符串创建的类
1.2String类的用法
1.2.1字符串构造
1.2.2 String是引用类型,内部并不存储字符串本身
1.3 String对象的比较
对于基本类型变量,==比较的是他们的值
对于内置类型,==比较的是他们的地址
public static void main(String[] args) {
int a = 1;
int b = 1;
int c = 2;
String s = new String("HHX");
String s1 = new String("HHX");
String s2 = s;
System.out.println(a==b);//true
System.out.println(a==c);//false
System.out.println(s==s1);//false
System.out.println(s==s2);//ture
}
String类重写了Object的equals方法,比较的是内容
public static void main(String[] args) {
String s = "HHX";
String s1 = "HHX";
System.out.println(s==s1);//true
System.out.println(s.equals(s1));//true
}
1.5字符串的不可变性
Sting类描述字符串中的内容不可修改
可以看到String的字符实际上保存在value中,但是value是由final修饰的,而String不可改变的原因实际上不是因为被final修饰,而是因为value被private修饰获取不到value
这里可以看到final修饰的引用对象的内容可以被修改,而value被private修饰,所以数组的引用不能被修改
2.StringBuffer和StringBuilder
StringBuffer和StringBuilder的append方法不会创建对象
效率高
字符串s+=并不是直接修改,而是new一个新的对象,这样就会造成资源的浪费
public static void main(String[] args) {
//可以看待在对String类进行修改时,效率是非常慢的,因此:尽量避免对String的直接需要,如果要修改建议尽量
//使用StringBuffer或者StringBuilder。
long start = System.currentTimeMillis();
String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}1
long end = System.currentTimeMillis();
System.out.println(end - start);
start = System.currentTimeMillis();
StringBuffer sbf = new StringBuffer();
for (int i = 0; i < 10000; i++) {
sbf .append(i);
}
end = System.currentTimeMillis();
System.out.println(end - start);
start = System.currentTimeMillis();
StringBuilder sbd = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sbd .append(i);
}
end = System.currentTimeMillis();
System.out.println(end - start);
}
2.1区别
区别在于StringBuffer作用于多线程,而StringBuilder作用于单线程
StringBuffer被synchronized修饰,相当于有一把锁,在多线程工作时不会被打扰,StringBuilder在单线程工作安全,但也不是说StringBuffer就是最好,频繁的开锁和解锁也是一种资源的浪费
2.2方法
关于String StringBuffer StringBuilder方法大家可参阅 Java Platform SE 8