java 中操作字符串都有哪些类?它们之间有什么区别? |
您所在的位置:网站首页 › java操作字符串都有哪些类 › java 中操作字符串都有哪些类?它们之间有什么区别? |
有三个分别是String,StringBuffer,StringBuilder。 1.String String是不可变得对象,在堆中,String的改变会非常消耗内存,直接上图 所以只是在String str="hello" 变成String str="hello"+"world"堆就占了三个内存,还有两个是无引用对象,这太浪费了。所以在经常改变字符串值得String类型不要用String 2.StringBuffer与StringBuilder StringBuffer和StringBuilder在修改的时候与String不同,StringBuffer与StringBuilder是在原有的基础上修改,不产生新的未使用对象,不会改变引用。也就是不会产生新对象,StringBuffer是线程安全的,但是StringBuilder是线程不安全的,StringBuffer在大多数情况下比String块,但是比不上StringBuilder。所以单线程建议用StringBuilder,多线程建议用StringBuffer。 StringBuffer和StringBulider只能new,不能进常量池。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 3.在某些特殊情况下,String的速度会优于StringBuffer比如说 String S1 = "This is only a" + " simple" + " test"; StringBuffer Sb = new StringBuffer("This is only a").append(" simple").append(" test"); 在这个例子中S1 String 对象的字符串拼接"This is only a" + " simple" + " test";会直接在编译期就合并成常量This is only a simple test 在jvm眼里S1是这样的 String S1 = “This is only a simple test”; 但是如果是 String S2 = “This is only a”; String S3 = “ simple”; String S4 = “ test”; String S1 = S2 +S3 + S4;那么jvm还会按照老规矩去一步一步弄。并且创建一堆无引用对象。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |