String 和 StringBuffer在检索字符的速度效率比较? String 和 StringBuffer在检索字符的速度效率比较? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 检索字符速度应该String更加快一些吧。String完全是用数组保存,检索起来应该很快。建议可以看看String和StringBuffer的源码,应该就会明白吧。 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的: String S1 = “This is only a” + “ simple” + “ test”; StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”); 你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个 String S1 = “This is only a” + “ simple” + “test”; 其实就是: String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:String S2 = “This is only a”;String S3 = “ simple”;String S4 = “ test”;String S1 = S2 +S3 + S4;这时候 JVM 会规规矩矩的按照原来的方式去做在大部分情况下 StringBuffer > String 字符串拼接 添加 肯定是StringBuffer快但是要是比较查找的效率 应该也是StringBuffer 因为它所占用的内存单元相对连续 String的内存单元也是连续的啊 String是内存单元是独立的 你要加长字符串 只能新开辟一个内存空间 这个内存空间的地和和之前的那个是不连续的 不对吧,存放String的表应该是顺序表吧,所以String的每个数据元素在内存空间上的存储应该是连续的。 关于swing绘制余弦函数图形 could not find the main class,program will exit 如何修改文件名! 请教大家一个问题 杨辉三角是什么?怎么做? Vector() 删除元素碰到的问题 关于jscookmenu问题? AutoJava Java代码自动生成工具 下载 文件转成字节数组,字节数组加密后成乱码的问题(加密大神,编码大神进) 如何控制客户端输入的只能是数字或者只能是非数字。 关于强制类型转换 使用log查看不到想要的输出,怎么办?
而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”); 你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
String S1 = “This is only a” + “ simple” + “test”; 其实就是:
String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;这时候 JVM 会规规矩矩的按照原来的方式去做在大部分情况下 StringBuffer > String
但是要是比较查找的效率 应该也是StringBuffer 因为它所占用的内存单元相对连续
String的内存单元也是连续的啊
不对吧,存放String的表应该是顺序表吧,所以String的每个数据元素在内存空间上的存储应该是连续的。