相同点:String、StringBuffer、StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractStringBuilder

不同点:String:char数组是final的,不可变,修改String时实际上是new一个新String对象返回,线程安全,频繁的增删操作时不建议使用

    StringBuffer:线程安全(StringBuffer中的方法中加synchronized锁),多线程建议使用这个,修改值时实际上是修改底层的char数组,相比String,开销更小

    StringBuilder:非线程安全的(StringBuilder中的方法中没加synchronized锁), 单线程使用这个更快,修改值时实际上是修改底层的char数组,相比String,开销更小

效率比较:StringBuilder > StringBuilder > String

String 底层源码如下定义:

/** The value is used for character storage. */
private final char value[]; /** The offset is the first index of the storage that is used. */
private final int offset; /** The count is the number of characters in the String. */
private final int count;

用于存放字符的数组被声明为 final 的,因此只能赋值一次,不可再更改。

StringBuffer(JDK1.0)

StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。

StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。

  • append():始终将这些字符添加到缓冲区的末端;
  • insert():则在指定的点添加字符。
  • --网上有很多例子这里不多唠嗑

StringBuilder(JDK5.0)

StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder 对象被当作是一个包含字符序列的变长数组。

java.lang.StringBuilder 是一个可变的字符序列,是 JDK5.0 新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

Java基础知识 String StringBuffer StringBuilder三者的区别(面试题)的更多相关文章

  1. 【Java基础】String StringBuffer StringBuilder

    String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...

  2. JAVA基础知识|String、StringBuilder、StringBuffer比较

    一.简介 String:不可变字符序列 StringBuffer:线程安全的可变字符序列 StringBuilder:非线程安全的可变字符序列 二.示例分析 [示例1] String A = &quo ...

  3. java 基础 5 String StringBuffer StringBuilder

    String是不可变的,原因 1是可以缓存hash值,因为String的hash值经常被使用,例如String用作HashMap等.不可变特性  使得hash值不变,因此只需要进行一次计算: 2Str ...

  4. final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?

    继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...

  5. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  6. Java学习笔记--String StringBuffer StringBuilder

    String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...

  7. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  8. JAVA基础之——String、StringBuilder、StringBuffer区别和使用场景

    本文主要讲解String.StringBuilder.StringBuffer区别和应用场景 本文以jdk1.8为例 1 String 操作过程:每次赋值时新建一个String对象. 2 String ...

  9. Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用

    Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类.做为基础知识是必须要理解的,这里做一些总结. A.区别 可以从以下 ...

随机推荐

  1. TCP/IP详解 读书笔记:TCP:传输控制协议

    TCP的服务 TCP为应用层提供一种面向连接的.可靠的字节流服务. 一个TCP连接中,仅有两方进行彼此通信,所以广播和多播不能用于TCP. TCP通过以下方式提供可靠性: 应用数据被切割为TCP认为最 ...

  2. Dubbo源码剖析六之SPI扩展点的实现之getExtension

    上文Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中分析了getExtensionLoader,本文继续分 ...

  3. CPU使用率过高怎么办

    实际上前文中关于CPU使用率过高如何通过各种工具获得相关的热点进程.那么进程有了,那得疑惑到底哪个哪段代码导致了这个进程成为热点呢? 如果在调试阶段,可以使用gdb中断运行,但是在生产环境肯定不行.L ...

  4. mysql 清库

    清库删表 select  concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE t ...

  5. 为什么我建议在复杂但是性能关键的表上所有查询都加上 force index

    最近,又遇到了慢 SQL,简单的看了下,又是因为 MySQL 本身优化器还有查询计划估计不准的问题.SQL 如下: select * from t_pay_record WHERE (( user_i ...

  6. #刷题记录--剑指 Offer 07. 重建二叉树

    输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 抓住一点,通过递归进行节点创建时,是按照 前序遍历数组 进行创建的. 根节点,根节点的左 ...

  7. 思迈特软件Smartbi:机器学习高深难懂?本文深入浅出给你讲明白!

    人工智能(Artificial Intelligence,缩写为AI)是对人的意识.思维过程进行模拟的一门新学科.如今,人工智能从虚无缥缈的科学幻想变成了现实.计算机科学家们在人工智能的技术核心--机 ...

  8. 谁说EXCEL不能处理大数据?那是你用错了工具

    我是一名数据分析师,每天需要和各种各样的数据和表格打交道,是一名名副其实的"表哥",不仅需要制作和更新公司里的日报.周报和月报,有时候也要为公司的会议准备各种数据材料.由于公司的业 ...

  9. 【C# 集合】HashTable .net core 中的Hashtable的实现原理

    上一篇我介绍了Hash函数 这篇我来说一下Hash函数在 HashTable中的应用. HashTable的特性: 1.装载因子:.net core 0.72 ,java 0.75 2.冲突解决方案: ...

  10. C# typeof() 和object.GetType() 、Type..GetType()使用和区别

    进行学习到表达树了,用动Tpye了.所以整理了以下他们区别和用法 总得来说他们都是为了获取某个实例具体引用的数据类型System.Type.1.GetType()方法继承自Object,所以C#中任何 ...