java基础--字符串

java当中的字符串类主要有三种:String 、StringBuffer、StringBuilder.

这里就要说说java创建对象的机制,比如:String  a="123";在java JVM(虚拟机)中的栈内存中创建了一个名为a的变量,堆内存中穿件了一个值为“123”的字符串对象,a指向了“123”字符串对象的地址。当我们再次创建String b=“123”;时,在栈内存中创建了一个b变量,堆内存已经有“123”字符串了,不需要重新创建,所以b直接指向“123”的堆内存对象,a和b共用一个堆内存对象,很好的节约了资源。

测试代码:

String a="123";
String b="123";
System.out.println(a==b);

结果是---------------------

true

因为等号比较的是两个对象的堆内存地址,所以两个相等!这里就要提enquals()方法:

原生的的equals()方法是要求地址和内容都一样才返回true,但是String中的equals()经过重写,只对比的是对象对应的值,和地址无关。而StringBuffer和StringBuilder中的equals()方法没有经过重写,所以是要对比地址和内容的。这里要注意。

Sring的对象修改时,例:

Stirng a="12";
a=a+"345";


此时的a和原来的a是不同的,因为String修改的性质是,一创建便不再修改,因为你在修改的时候,内部机制是,再创建了一个新的a对象,然后把旧的a对象交由垃圾回收机制,等待回收。

论执行速度来分的话:string<StringBuffer<StringBuilder。

string的对象修改的时候,是创建了一个新对象,而旧对象等待java的垃圾处理器回收。StringBuffer和StringBuilder都是在原有基础上改变的。而StringBuffer是线性安全的,StringBuilder是非线性安全的,StringBuffer大部分方法前都有关键字synchronized。所以运行速度比StringBuilder慢。

因为StringBuilder和StringBuffer都是不创建新对象,直接在旧对象中修改,所以快!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值