Java String,StringBuilder,StringBuffer初步理解

今天药忘吃喽~ 2023-07-13 04:05 36阅读 0赞

前言:做文件操作的时候又用到了String,因为之前看过String的一点东西,一直担心会不会内存溢出啥的,所以找了篇帖子来系统学一下。

参考:

https://blog.csdn.net/weixin_43904316/article/details/89058575

https://www.cnblogs.com/chengshan/p/12272443.html

https://baijiahao.baidu.com/s?id=1650332944024875156&wfr=spider&for=pc

目录

第一章 String字符串

第二章 StringBuilder与StringBuffer

第三章 总结


第一章 String字符串

String是字符串常量,常量是不可以被修改的,所以String对象一旦被创建是不能改变的,但是下面的代码明明改变了,其实这只是一种假象。jvm实际上是这样解析的:先在字符串常量池创建一个对象str赋值asd,然后在创建个对象赋值asdas第一个str就会垃圾回收机制回收,所以String对象一旦被创建是不能改变,java String对象实际上是一个不断被创建然后被回收的过程。所以其执行速度是最慢的,但是不可变也注定其线程是安全的。

  1. package demo3;
  2. public class StringDemo {
  3. public static void main(String[] args) {
  4. String str = "asd";
  5. System.out.println(str);
  6. str = str+"as";
  7. System.out.println(str);
  8. }
  9. }

相同的字符串,其引用指向的地址是一样的,除非字符串使用new建立的

字符串创建方法:

format_png

可以看到直接写的字符串地址相同,用new创建的字符串地址不同

format_png 1

第二章 StringBuilder与StringBuffer

为了避免进行一次字符串操作都要创建一个新字符串然后销毁旧字符串的行为,可变字符串StringBuilder和StringBuffer出现了,StringBuilder是线程不安全的,但是效率高,StringBuffer是线程安全的,但是效率低。

70

可以看得出StringBuffer多出了synchronized

  1. @Override
  2. public synchronized StringBuffer append(Object obj) {
  3. toStringCache = null;
  4. super.append(String.valueOf(obj));
  5. return this;
  6. }
  7. @Override
  8. public synchronized StringBuffer append(String str) {
  9. toStringCache = null;
  10. super.append(str);
  11. return this;
  12. }
  13. @Override
  14. public StringBuilder append(Object obj) {
  15. return append(String.valueOf(obj));
  16. }
  17. @Override
  18. public StringBuilder append(String str) {
  19. super.append(str);
  20. return this;
  21. }

经过测试,StringBuilder也确实更快

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E2MTAzNzY2ODE_size_16_color_FFFFFF_t_70

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E2MTAzNzY2ODE_size_16_color_FFFFFF_t_70 1

第三章 总结

如果要操作少量的数据用 String;

多线程操作字符串缓冲区下操作大量数据 StringBuffer;

单线程操作字符串缓冲区下操作大量数据 StringBuilder。

发表评论

表情:
评论列表 (有 0 条评论,36人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HttpSecurity初步理解

    为什么会有 web security 这么个东西存在? 为了阻止假用户冒充真实用户访问网站,所以需要 `认证(authentication)`。 为了阻止真实用户

    相关 JSP初步理解

      目录  第一章 什么是jsp  第二章 jsp脚本和注释 2.1 JSP脚本 2.2 JSP注释 第三章 jsp的指令 3.1 page指令 3.2 inc

    相关 servlet初步理解

                                         第一章 什么是servlet servlet其实就是java代码,这些代码运行在服务器上,来对客

    相关 JVM初步理解

    前言:在慕课网上学习剑指Java面试-Offer直通车时所做的笔记 目录 第一章 对Java的理解 第二章 Java平台无关性如何实现 第三章 JVM如何加载class

    相关 SpringCloud初步理解

    1.什么是SpringCloud? SpringCloud是就是一个微服务架构的框架,实际上微服务SpringCloud就是一个全家桶式的技术栈,包含了很多的组件,主要的有