Java 基础入门篇(六):String 与 StringBuilder


一、String 类概述

java.lang.String 类代表字符串,它定义的变量可以指向一个字符串对象。同时 String 类提供了很多操作字符串的功能,可以直接使用。

String 是不可变字符串:String 变量每次的修改其实都是产生并指向了新的字符串对象,而原来的字符串对象都是没有改变的,所以称不可变字符串。

  如下方程序,首先在字符串常量池中,创建 “传智” 对象,并指向该对象。当执行 name+=“教育” 时,首先在常量池中创建 “教育” 对象,并将 “传智” 与 “教育” 两个对象拼接生成 “传智教育” 对象,并指向该对象。以此类推…

在这里插入图片描述
每当用 + 符号,拼接生成新的字符串时,原来的字符串都没有改变,因此 String 是不可变字符串。


二、String 创建对象的方式

2.1 创建对象的两种方式

  • 方式一:直接使用 " " 定义(推荐方式)
    String name = “黑马”;

  • 方式二:通过 String 类的构造器创建对象
    在这里插入图片描述


2.2 面试:两种方式的区别

  • 双引号 " " 给出的字符串对象,存在于堆内存中的常量池中,相同内容只会存储一份
    在这里插入图片描述
  • new 字符串对象,每new一次都会在堆内存中产生一个字符串对象
    在这里插入图片描述

2.3 常见面试题

  1. 下列代码的运行结果是?

    String s2 = new String(“abc”);:先去常量池中创建对象,然后再通过 new 创建对象。
    String s1 = “abc”;:由于常量池中有对象,所以不需创建对象。
    在这里插入图片描述
    扩展: 若先执行 String s1 = “abc”;,再执行 String s2 = new String(“abc”); ,则 s1 与 s2 分别创建一个对象。


  1. 下列代码的运行结果是?

    s3 不在常量池中,即不是双引号直接给出的,不会放在常量池中。
    在这里插入图片描述
    扩展: 程序总共创建五个对象,其中常量池中分别有:“abc”、“ab”、“c”,不在常量池中String类型变量 “abc” 以及 StringBuilder 类型变量 “abc”。(具体看后文)


  1. 下列代码的运行结果是?
    java 存在编译优化机制,程序在编译时,自动将 “a”+“b”+“c” 直接转换成 “abc”。
    在这里插入图片描述

三、String 类常用方法

3.1 字符串内容比较

== 判断字符串对象是判断地址的,这样会引起很多业务问题。推荐使用 equals 方法比较:

在这里插入图片描述

:基本数据类型用 == 比较。


3.2 常用 API:遍历、截取、替换、分割

在这里插入图片描述
举例:

String str = "abcdefg";
String s1 = "cde";
String s2 = "ggg";
String replaceStr = str.replace(s1, s2);
System.out.println(replaceStr); // abgggfg

四、StringBuilder 字符串操作类

StringBuilder 是一个可变的字符串的操作类,我们可以把它看成是一个对象容器。

作用:提高字符串的操作效率,如拼接、修改等

4.1 构造器

在这里插入图片描述


4.2 常用方法

在这里插入图片描述


4.3 String 拼接字符串原理

  String 拼接字符串底层使用的是 StringBuilder。在拼接前,首先会在堆内存中创建 StringBuilder 对象,然后调用 toString 方法将 StringBuilder 转换为 String,并赋值给 String 类变量。
在这里插入图片描述


4.4 StringBuilder 提高效率原理图

对比 String ,StringBuilder 在拼接字符串时,其不会去创建额外对象,而是在原来的地址中进行动态添加。
在这里插入图片描述
结论:当需要进行字符串操作的时候,应该选择 StringBuilder 来完成,性能更好。

注意:StringBuilder 只是拼接字符串的手段,最终的目的还是要恢复成 String 类型

StringBuilder stb = new StringBuilder();
String str = stb.toString();

文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiu Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值