解析String类和StringBuilder

介绍一下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方式比上面的方式快了几千倍


没什么写的了














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值