String,StringBuffer,StringBuilder的区别?

String是不可变的,StringBuffer和StringBuilder是可变的。StringBuffer是线程安全的,StringBuilder是非线程安全的。

String的 + 是如何实现的

使用+拼接字符串,其实只是Java提供的一个语法糖。

其实String的 + 底层是new 了一个StringBuilder,使用append方法对这些字符串进行了拼接。

"a" + "b" + "c";

(new StringBuilder()).append("a").append("b").append("c");

一句话可以总结,+操作底层是使用了StringBuilder.append()。

StringBuilder和StringBuffer

StringBuilder类和String类类似,底层也是封装了一个字符数组。

但是他与String不同的是,他并不是final的,所以他的字符数组是可以修改的。

与此同时,他有一个实例变量count,表示数组中已经使用的字符个数。

StringBuffer和StringBuilder是类似的,最大的区别就是StringBuffer是线程安全的,因为StringBuffer的append的方法上加上了synchronization修饰符。

总结

String是不可变的,因为使用了final

StringBuilder和StringBuffer是可变的,因为底层的字符数组没有被final修饰

StringBuilder是线程不安全的,StringBuffer是线程安全的,因为StringBuffer的append方法使用了synchronization。

相关推荐

  1. “==”和“equals”区别

    2024-06-07 05:32:01       61 阅读
  2. == 和 equals 区别

    2024-06-07 05:32:01       64 阅读
  3. #{}和${}区别

    2024-06-07 05:32:01       34 阅读
  4. &&和&区别

    2024-06-07 05:32:01       39 阅读
  5. ==与===区别

    2024-06-07 05:32:01       34 阅读
  6. &与 && 区别

    2024-06-07 05:32:01       30 阅读
  7. TCP/UDP区别

    2024-06-07 05:32:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 05:32:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 05:32:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 05:32:01       82 阅读
  4. Python语言-面向对象

    2024-06-07 05:32:01       91 阅读

热门阅读

  1. LeetCode # 1158. 市场分析 I

    2024-06-07 05:32:01       35 阅读
  2. 【HarmonyOS】鸿蒙应用子模块module资源如何获取

    2024-06-07 05:32:01       31 阅读
  3. Nginx在Docker中的应用:容器化部署与扩展

    2024-06-07 05:32:01       33 阅读
  4. PostgreSQL的视图pg_stat_replication

    2024-06-07 05:32:01       30 阅读
  5. nginx常用配置指南

    2024-06-07 05:32:01       27 阅读
  6. docker学习--docker容器镜像常用命令大全(简)

    2024-06-07 05:32:01       35 阅读