介绍一下String类
String类是一个final类,不允许被继承
String类是java中有字面值的两个类之一,至于另一个类是什么呢,我也不知道~~...
至于什么是字面值了?
Sting str = "abc";
int i = 12;
这样可以直接赋值就是有字面值的意思
java中在很多时候都会定义一个字符串,而这些字符串有很多重复的,例如,在学生类的班级啊学校啊什么的,都是一些相同的字符串
java中为了不在使用这些重复的字符串浪费空间,就将String定义为了一个final类型的.而且这个str的值是不能改变的,这又是为什么呢?
其实我们在java中经常也会改变一个字符串的值:
String str = "abd";
str = "bcd";
但是为什么说不能改变str的值呢?
在创建"abc"这个字符串的时候是现在串池里找是否有"abc"这个字符串,如果没有则创建一个,如果有就将这个字符串的地址赋给str引用
str = "bcd"这句话呢其实有几个过程,首先创建"bcd"字符串,再将地址赋给str,其实这时候改变的只是str所存的地址,"abc"这个字符串对象其实还存在于串池中.
经典面试题:
String str = new String("abc");
这及代码创建了几个对象?
答案是两个
首先,在串池中创建了一个"abc"的对象,然后new了一个String对象,这个对象是存储在Heap(对空间)中的,是调用了String类的以字符串类型为参数构造方法.
所以在执行这样个代码的时候:
String str = "A"+"B"+"C"+"D";
会创建许多的对象,而最终我们需要的其实只有最后的字符串对象
其它的中间对象都沦为了垃圾对象,造成了内存的浪费
这时候Sun公司为我们提供了一个StringBuilder类,这个类创建的对象是存在Heap(堆空间)中的,它的值时可以改变的,在我们进行大量的字符串连接的时候就不会产生垃圾对象了
String str;
Sting str1 = "A";
for(int i=0;i<10000;i++){
Str+=Str1;
}
StringBuilder str2 = new StringBuilder("");
for(int i=0;i<10000;i++){
str2=str2.append(str1);
}
上面这两种方式产生最后的结果都是一样的.但是下面StringBuilder方式比上面的方式快了几千倍
没什么写的了