Java String,StringBuilder,StringBuffer的区别
来源:互联网 发布:四川广电网络机顶盒 编辑:程序博客网 时间:2024/05/17 21:43
三者的区别:
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。但值得注意的是:
在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
String S1 = “1” + “ 2” + “ 3”;
StringBuffer Sb = new StringBuilder(“1”).append(“ 2”).append(“ 3”);
你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
String S1 = “1” + “2” + “3”; 其实就是:
String S1 = “123”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “1”;
String S3 = “2”;
String S4 = “ 3”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
- JAVA中String、StringBuffer、StringBuilder的区别
- java-String StringBuffer和StringBuilder的区别
- Java中String,StringBuffer,StringBuilder的区别?
- JAVA---------------String,StringBuffer与StringBuilder的区别??
- Java:String、StringBuffer和StringBuilder的区别
- JAVA中String、StringBuffer、StringBuilder的区别
- Java:String、StringBuffer和StringBuilder的区别
- java中String、StringBuilder、StringBuffer的区别
- java:String、StringBuffer和StringBuilder的区别
- Java中String, StringBuffer, StringBuilder的区别
- Java:String、StringBuffer和StringBuilder的区别
- Java String StringBuffer StringBuilder 的区别
- Java&&String,StringBuffer与StringBuilder的区别??
- Java:String、StringBuffer和StringBuilder的区别
- Java:String、StringBuffer和StringBuilder的区别
- Java:String、StringBuffer和StringBuilder的区别
- [Java]String,StringBuffer与StringBuilder的区别??
- Java:String、StringBuffer和StringBuilder的区别
- 《机器学习实战》第二章:k-近邻算法(1)简单KNN
- 解决android studio引用远程仓库下载慢(JCenter下载慢)
- startActivityForResult用法以及请求码结果码
- leetcode101 Symmetric Tree
- linux下常见的权限问题及验证
- Java String,StringBuilder,StringBuffer的区别
- hive中的LEFT SEMI JOIN
- js:防抖动与节流
- 50种方法优化SQL Server
- 前端性能优化-seo必看
- 这场被诋毁的爱情, 曾是错误,终究变成美德。
- 【LeetCode】419. Battleships in a Board
- 跨账本资产原子互换协议
- 最短路算法之Floyd