我是靠谱客的博主 老迟到小蚂蚁,最近开发中收集的这篇文章主要介绍【Java基础知识复盘】String、StringBuffer、StringBuilder篇——持续更新中,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本人知识复盘系列的博客并非全部原创,大部分摘自网络,只是为了记录在自己的博客方便查阅,往后也会陆续在本篇博客更新本人查阅到的新的知识点,望悉知!

String类

在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

创建字符串

  • String str = "bejav";
    
  • String str = new String("bejav");
    

String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上

这里有一个点需要注意:String str = “bejav” 创建了多少个对象? 而 String str = new String(“bejav”) 又创建了多少个对象?

  • String str = “bejav” 创建了0个或1个对象,因为这是存储在公共常量池中,如果常量池中有bejav,就不用创建对象,如果没有就创建
  • String str = new String(“bejav”) 是存储在堆上,所以这里首先就需要在堆中创建一个对象,然后再从公共常量池中寻找bejav,如果没有就还要再创建一个对象

img

String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串

String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了

字符串长度

用于获取有关对象的信息的方法称为访问器方法

String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数

连接字符串

String类提供了连接两个字符串的方法:

string1.concat(string2);
"我的名字是".concat("bejav");

更常用的是使用 + 操作符来连接字符串

String方法-看API

https://www.runoob.com/manual/jdk11api/java.base/java/lang/String.html

常见面试题

String为什么是不可变字符串?但是我们在实际应用中String是可以被改变的,是为什么

不可变字符串主要是:

  • 保存字符串的数组被final修饰并且是私有的,并且 String 类没有提供和暴露修改这个字符串的方法
  • String 类被 final修饰不能被子类继承,进而避免了子类破坏 String不可变

实际中可变的原因是:

  • 其实并不是改变 String ,是新创建了一个 String 对象指向改变后的值,原本的 String 成为副本字符串对象存留在内存中。

String str = new String(“abc”) 和 String str = “abc” 两者的区别在哪里?

String str = new String(“abc”) :

  • 不管字符串常量池中存不存在 “abc” ,直接就创建直接新建一个字符串 “abc” (注意新建的字符串 “abc” 不是在字符串常量池中,而是在堆中),然后将其赋给str。这种效率低于使用字符串常量池的方式。

String str = “abc” :

  • 首先查看字符串常量池中是否存在字符串 “abc” ,如果存在则直接将“abc”赋给str,如果不存在则先在字符串常量池中新建一个字符串 “abc” ,然后再将其赋给str。

String中 + 和 StringBuffer中的append性能上有什么区别?

+:

每次对 String 类型进行 “+” 的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。所以经常改变内容的字符串最好不要用 String 的 “+” 。因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

append:

使用 StringBuffer 类的 append 方法时每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。

需要线程安全使用 StringBuilder

StringBuffer、StringBuilder

介绍

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

img

在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

StringBuffer方法

以下是StringBuffer类支持的主要方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AOam0zYK-1671692616902)(C:Users86152AppDataRoamingTyporatypora-user-imagesimage-20221221153809908.png)]

还有其他常用的方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VMoidke-1671692616903)(C:Users86152AppDataRoamingTyporatypora-user-imagesimage-20221221153906648.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdVYrj5i-1671692616903)(C:Users86152AppDataRoamingTyporatypora-user-imagesimage-20221221153917046.png)]

更多的StringBuffer类的介绍:https://www.runoob.com/manual/jdk11api/java.base/java/lang/StringBuffer.html

StringBuilder类:https://www.runoob.com/manual/jdk11api/java.base/java/lang/StringBuilder.html

最后

以上就是老迟到小蚂蚁为你收集整理的【Java基础知识复盘】String、StringBuffer、StringBuilder篇——持续更新中的全部内容,希望文章能够帮你解决【Java基础知识复盘】String、StringBuffer、StringBuilder篇——持续更新中所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部