日升时奋斗,日落时自省
目录
3.1StringBuilder和StringBuffer区别
二、String类
1.其他操作方法
String有很多的方法,我们在这里再简要的补充三个
(1)String trim(); 去掉字符串中的左右空格,中间的空格不动
(2)String toUpperCase(); 字符串转化为大写
(3)String toLowerCase(); 字符串转化为小写
String trim()使用例:
字符串大小写转换
2.字符串常量池
2.1对象创建的了解
我们拿一个实例:
这里为什么会是只有一组是true呢,不都是hello的字符串吗
str1与str2相同这里内部就涉及到了常量池,我们这里其实不是真的对hello进行了判断是否相同,而是地址,更真实一点来说是哈希值相同
注意:这样的好处是为了运行更快,节省内存
那我们来分析一下这四个个不同之处
分析一下这个图,0x12是表示是str1的地址,放在常量池中,当str2也是直接赋值字符串时,就会直接在常量池中找有没有0x12这个地址了,有的话就指向了该地址,所以str2==str1为真,str3与
str4是创建对象初始化字符串,创建对象就有了新的地址,虽然值是相同的,但是我们对比的是地址。(这里地址都是随便写,方便理解,别当真),str1与str2是常量池中当然不会与创建对象的地址相同。
2.2字符串修改
注意:当前我们修改都是会创建新对象的,效率很低,因为String是不能修改的,尽量避免直接对String类型修改
使用例:
这里创建了几个对象,创建了三个对象,hello一个,world一个,打印他们的一起又是一个。
3.StringBuilder和StringBuffer
在了解这个类之前,我们靠近这了解
for循环,我们很常了解的一个遍历方法,但是我们遍历的数据都是不很大的,for循环里面都有什么呢
在这个地方是for循环的,汇编时涉及到了什么,这里面我们能看到一个StringBuilder这里我们不用看其他的,知道这是一个循环,每次循环都会new一个对象StringBUilder,所以说for循环速度很慢,这里就可以来使用我们的StringBuilder来解决运行速度问题,在这里的遍历
(append方法是拼接的意思)这里我们稍微改动一下,就是把创建StringBuilder对象放在for循环的前面,每次有了就不用在新创建对象了,加快了运行速度(这些数字都不大,可以尝试大一点的数字就可以看出区别了)
以上这两个代码表达效果一样,上面的那个表示的for循环在汇编时就是这么运行的
注意:这里使用StringBuilder和StringBuffer都是一样的
3.1StringBuilder和StringBuffer区别
这两个类也可以赋值字符串,那肯定是不能直接赋值的,需要如下赋值
这就是StringBuilder图解
这是我们刚刚使用append时调用的方法,返回的是this当前stringBuilder本身,不像String需要再创建新对象来存放
我们了解一下怎么将StringBuilder与String相互转换
我们这里就拿一个append方法来举例吧:
觉得这些有什么不同的地方呢,其实不同就在于StringBuffer中有一个synchronize的出现,能够为多线程有一个哨卡作用没更加安全
总述:
(1)String不能修改其内容,StringBuilder和StringBuffer可以修改其内容
(2)StringBuilder和StringBuffer其实他俩的大部分功能是相似的,就是看在哪里使用安全性等问题
(3)StringBuilder线程安全问题,StringBuffer无关线程安全