【Java扫盲篇】String、String Buffer和String Builder的区别

这篇具有很好参考价值的文章主要介绍了【Java扫盲篇】String、String Buffer和String Builder的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你在面试时,面试官让你讲讲String String Buffer String Builder的区别,你是否能流畅的、完整的叙述出他们三者的区别?

✍先说结论

  • 相同点: 他们的底层都是由char数组实现的。
  • 不同点:
  1. String对象一旦创建,是不能修改的,如果要修改,会重新开辟空间来存储修改后的对象;而String Buffer和String Builder创建的对象是可以修改的。
  2. String Buffer是线程安全的,他几乎所有方法都被synchronization 所修饰,允许采用多线程的方式执行添加或删除字符的操作,但是效率比较低;而String Builder是单线程的。如果所有字符串在一个单线程中编辑(通常都是这样),则应该使用String Builder。这两个类的API大部分是相同的。
    总结
  • 当在程序中需要频繁的更改字符串的内容时,不要使用String(会浪费大量的空间)
  • 如果是要考虑线程下的安全问题时,使用StringBuffer
  • 否则使用String Builder

✍String类

String的三种构造方法

public static void main(String[] args) {

       // 使用常量串构造
       String s1 = "hello bit";
       System.out.println(s1);
       
       // 直接newString对象
       String s2 = new String("hello bit");
       System.out.println(s1);
       
       // 使用字符数组进行构造
       char[] array = {'h','e','l','l','o','b','i','t'};
       String s3 = new String(array);
       System.out.println(s1);
}

我们要理解String类,首先要搞清楚String的底层
通过源码可以看出
String是一个引用类型

【Java扫盲篇】String、String Buffer和String Builder的区别,Java学习成长记,java,开发语言,服务器

我们举几个实际的例子
来更清楚的了解String的本质

请你先判断这个表达式的结果是什么
【Java扫盲篇】String、String Buffer和String Builder的区别,Java学习成长记,java,开发语言,服务器

答案为true
我们画图来理解
【Java扫盲篇】String、String Buffer和String Builder的区别,Java学习成长记,java,开发语言,服务器

再判断一下这个表达式的值是什么
【Java扫盲篇】String、String Buffer和String Builder的区别,Java学习成长记,java,开发语言,服务器

结果为false
【Java扫盲篇】String、String Buffer和String Builder的区别,Java学习成长记,java,开发语言,服务器

✍字符串的不可变性

【Java扫盲篇】String、String Buffer和String Builder的区别,Java学习成长记,java,开发语言,服务器
【Java扫盲篇】String、String Buffer和String Builder的区别,Java学习成长记,java,开发语言,服务器

  1. String类被final修饰,表明该类不能被继承
  2. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。

✍为什么String要设置成不可变类型

  1. 方便实现字符串对象池. 如果 String 可变, 那么对象池就需要考虑写时拷贝的问题了.
  2. 不可变对象是线程安全的.
  3. 不可变对象更方便缓存 hash code, 作为 key 时可以更高效的保存到 HashMap 中

易错点

【Java扫盲篇】String、String Buffer和String Builder的区别,Java学习成长记,java,开发语言,服务器

  • Java中有常量优化机制,“Hello"和"World"本身就是字符串常量,所以在编译时,会直接把"Hello"和"World"合并成"HelloWorld"字符串,又因为在执行s3的时候已经在常量池中创建了"HelloWorld".
  • 当变量与字面量或变量与变量进行拼接时,会在堆中创建一个StringBuilde对象,然后使用StringBuilder的append()方法将变量与字面量或变量与变量进行拼接,最后调用toString()方法转成String对象。所以s5、s6、s7指向的都是堆内存中String对象的地址值。
public static void main(String[] args) {
    final String s1="Hello"; 
    String s2="HelloWorld";
    String s3=s1+"World";
    System.out.println(s2==s3); //true
}

被final修饰表示是一个常量,所以此时s1+“World"就相当于"Hello”+“World”,结果仍然是一个常量。

有人说:字符串不可变是因为其内部保存字符的数组被final修饰了,因此不能改变。
这种说法是错误的,不是因为String类自身,或者其内部value被final修饰而不能被修改。
final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。

所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象

以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞文章来源地址https://www.toymoban.com/news/detail-855481.html

到了这里,关于【Java扫盲篇】String、String Buffer和String Builder的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中==和equals的区别,包装类对比、String和new String

            对于这个问题,我们得了解基本类型和引用类型在内存中的结构,具体如下: 引用对象句柄访问: 引用对象直接指针访问:           可以看出,无论哪种方式访问基本类型和引用类型的实例数据,基本类型的内存上是保存值,而引用类型的内存上是保存指针

    2024年02月11日
    浏览(40)
  • Java-String、StringBuffer、StringBuilder区别及相关面试题

    在Java编程中,经常会遇到处理字符串的需求。Java提供了多个类来处理字符串,其中最常用的是String、StringBuffer和StringBuilder类。本文将介绍这三个类的基本用法和区别。 String是Java中最常用的字符串类,它是不可变的,也就是说一旦被创建,它的值就不能被改变。下面是Stri

    2024年02月11日
    浏览(37)
  • Java基础09 —— 字符序列--String、StringBuilder、StringBuffer区别及其方法介绍

    字符与字符串 字符类型(char)是Java中的基本数据类型,占2个字节16位,默认值是 ‘u0000’ 。字符是用单引号引住的单个符号. 字符串(String)是用双引号引住的任意个字符,是引用数据类型,默认值是null 。字符串其实就是字符组成的序列 字符串声明 举例: 字符序列 多个字符

    2024年02月09日
    浏览(37)
  • 【设计模式——学习笔记】23种设计模式——建造者模式Builder(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    建造者模式又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同属性的对象 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,不

    2024年02月15日
    浏览(38)
  • Java String基础学习

    目录 1、String的构造方法 2、String内存模型 3、字符串的比较 4、字符串的练习 1、用户登录系统 2、遍历字符串 3、统计字符次数 4、拼接字符串 5、字符串的反转 6、金额转换 7、手机号屏蔽 * 8、身份证信息查看 9、敏感词替换 5、StringBuilder 1、概念及练习 2、链式编程思想 3、小

    2024年01月21日
    浏览(34)
  • 【从零开始学习JAVA | 第八篇】String类

    目录 前言: String类: 常见的认识误区: 创建String类:  注意点: 总结:         String类是Java中最常见的一个类,本篇将对Stirng类的各种功能进行详细的介绍,各位小伙伴如果感兴趣可以点击进来观看。 Java中的String类是一个非常常用的类, 它表示一串字符序列 。Java的字

    2024年02月10日
    浏览(50)
  • Java类的Builder应用以及使用@Data和@Builder高效应用Builder

    记录 :395 场景 :手动编写Java类的Builder及其应用。使用lombok的@Data和@Builder注解构建Java类的Builder及其应用。 Java Builder模式 :是Java设计模式之一,它属于对象创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 结论一 :使用

    2024年02月09日
    浏览(40)
  • 什么是Java中的Builder模式?

    Java中的Builder模式是一种结构型设计模式,它允许你将一个复杂对象的构建过程分解为多个步骤,使得客户端可以按照一定的顺序构建对象,而无需在每个步骤中都进行实例化。这种模式有助于隐藏对象的构造过程,使得代码更加清晰、易于理解和维护。 下面是一个简单的示

    2024年02月13日
    浏览(35)
  • 对于Java的前端知识扫盲

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让JavaScript可以在服务器端运行。Node.js提供了非阻塞I/O、事件驱动的编程模型,使得服务器端的JavaScript可以高效地处理大量并发请求。与此相比,JDK是Java Development Kit的缩写,是Java开发环境的基础包,包含了Java编译器、JRE运

    2023年04月11日
    浏览(36)
  • Java中return的用法(快速扫盲)

    🎉🎉🎉 点进来你就是我的人了 博主主页: 🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 🤺🤺🤺 目录 前言  1.定义 2.return的用法 3.break和return的区别: 此篇帮助不理解return用法的小伙伴们快速扫盲!  return语句可以使其从当前方法中退出,返回到调用该

    2023年04月27日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包