我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中String类、StringBuffer和StringBuilder怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中String类、StringBuffer和StringBuilder怎么使用

这篇文章主要介绍“Java中String类、StringBuffer和StringBuilder怎么使用”,在日常操作中,相信很多人在Java中String类、StringBuffer和StringBuilder怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中String类、StringBuffer和StringBuilder怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

String类基本概念

  • String类属于引用数据类型,不属于基本数据类型。

  • 在Java中只要是" "(双引号)中的,都是String对象。

  • java中规定,双引号中的字符串是不可变的,也就是说"abc"自出生到死亡都不可能变成"abcd",也不能变成"ab"。

  • 在JDK中双引号括起来的字符串都是存储在方法区的字符串常量池当中的。(因为在实际开发中,字符串的使用频率十分高,为了执行效率,就把字符串放在了方法区中的字符串常量池当中)

String字符串的存储原理

  • 通过 String s = “abc” 这种方式,会在方法区中的字符串常量池创建对象,s会保存该字符串在字符串常量池中的地址。

  • 通过 String s = new String(“abc”)的方式创建对象,首先会在字符串常量池中创建"abc"对象(如果字符串常量池中已经有了"abc"则不会再次创建),然后会在堆区创建String类对象,它会储存" abc "在方法区中的地址,s又会保存堆中String对象的地址。

看以下代码:

public class StringTest01 {    //这两行代码表示创建3个字符串对象,且都在字符串常量池中    String A = "abc";    String B = "abc" + "de";    //通过 new 来创建字符串对象,会先在字符串常量池中寻找"abc"    //找不到的话就会在字符串常量池中创建一个"abc"对象    //在堆中创建创建字符串对象,并且保存"abc"在字符串常量池中的地址    String C = new String("abc");}

按照以上代码画出JVM内存简图如下:

Java中String类、StringBuffer和StringBuilder怎么使用

知道了String类字符串的存储原理之后,就可以很容易知道以下代码的编译结果:

public class StringTest01 {    public static void main(String[] args) {        //没有在堆中创建对象        //s1与s2都存的是"hello"在字符串常量池中的地址        String s1 = "hello";        String s2 = "hello";        //在堆中创建了对象        //m,n分别存的是他们在堆中对象的地址        String m = new String("你好!");        String n = new String("你好!");        System.out.println(s1 == s2);//结果为true        System.out.println(m == n);//结果为false    }}

String类的常用构造方法

//String类构造方法的使用public class StringTest02 {    public static void main(String[] args) {        byte []x1 = { 97 , 98 , 99 };        char []x2 = {'我','是','中','国','人'};        //String s = new String(byte数组);        String y1 = new String(x1);        System.out.println(y1);//ABC        //String s = new String(byte数组,偏移量,长度)        String y2  = new String(x1,1,2);        System.out.println(y2);//BC        //String s = new String(char数组)        String y3 = new String(x2);        System.out.println(y3);//我是中国人        //String s = new String(char数组,偏移量,长度)        String y4 = new String(x2,2,3);        System.out.println(y4);//中国人    }}

String类中常用方法

public class StringTest03 {    public static void main(String[] args) {        //public char charAt(int index)方法        //返回索引值处的char类型字符        char s1 = "中国人".charAt(1);        System.out.println(s1);//国        //public int compareTo(String anotherString)方法        //按字典序比较两个字符串        System.out.println("abc".compareTo("abd"));//负整数        System.out.println("abc".compareTo("abc"));//0        System.out.println("abc".compareTo("abb"));//正整数        //public boolean contains(CharSequence s)方法        //判断字符串是否包含s        System.out.println("abcdefg".contains("efg"));//true        System.out.println("abcdefg".contains("hij"));//false        //public boolean endsWith(String suffix)方法        //判断字符串是否以suffix结尾        System.out.println("abcde".endsWith("cde"));//true        System.out.println("abcde".endsWith("qwe"));//false        //public boolean equalsIgnoreCase(String anotherString) 方法        //判断两个字符串是否相等,忽略大小写        System.out.println("ABcd".equalsIgnoreCase("abCD"));//true        //public byte[] getBytes()        //将字符串转换成byte数组,并返回        byte [] s2 = "abcdefg".getBytes();        for (int i = 0; i < s2.length; i++) {            System.out.print(s2[i] + " ");        }//97 98 99 100 101 102 103        //public int indexOf(String str)        //判断某个子字符串在当前字符串中第一次出现处的索引        //若子字符串不存在,返回-1        System.out.println("abcdefghigk".indexOf("hig"));//7        System.out.println("abc".indexOf("fgh"));//-1        //public int lastIndexOf(String str)        //判断某个子字符串最后一次出现在当前字符串中的索引        System.out.println("abcdhdhdabc".lastIndexOf("abc"));//8        //public boolean isEmpty()        //判断字符串是否为空串        //底层调用length()方法,空串长度为0        //注意:判断数组长度是length属性,判断字符串长度是length()方法        System.out.println("".isEmpty());//true        //public String replace(char oldChar,char newChar)        //返回一个将原字符串中所有的oldChar替换为newChar的新字符串,不改变原字符串        String s3 = "aaatttooo";        System.out.println( s3.replace('t','q'));//aaaqqqooo        //public String replace(CharSequence target,CharSequence replacement)        //CharSequence可以看出String        //将原字符串中的 target 全部换成 replacement        String s4 = "abcsgdjsssjabcjdjjdjabc";        System.out.println(s4.replace("abc","www"));//wwwsgdjsssjwwwjdjjdjwww        //public String[] split(String regex)        //以regex为分界线,将字符串分割保存在一个字符串数组当中,并返回        String s5 = "2022-3-19";        String [] str = s5.split("-");        System.out.println(str[0] + str[1] + str[2]);//2022319        //public String substring(int beginIndex)        //返回一个以索引beginIndex开始直至结尾的字符串        System.out.println("abcdefgh".substring(4));//efgh        //public String substring(int beginIndex,int endIndex)        //返回一个以索引值beginIndex开始,以索引值endIndex结束(不包含该索引值处的字符)的子字符串        System.out.println("abcdefgh".substring(2,5));//cde        //public char[] toCharArray()        //将一个字符串以字符数组的形式返回        char[] str2 = "abcdefg".toCharArray();        for(int i = 0 ; i < str2.length ; i++){            System.out.println(str2[i]);        }        //public String toLowerCase()        //返回一个将原字符串中所有字符变成小写的新字符串        System.out.println("ABcDeFG".toLowerCase());//abcdefg        //public String toUpperCase()        //返回一个将原字符串中所有字符变成大写的新字符串        System.out.println("aCbcdEfg".toUpperCase());//ABCDEFG        //public String trim()        // 返回一个去除字符串的前后空白(空格)的新字符串        System.out.println("       abcdefg      ".trim());//abcdefg        //public static String valueOf(参数列表)        //参数列表可以是int型,char型,int数组,对象 等等.......        //String类中唯一一个静态方法,可以直接调用        //将非字符串转换为字符串        //println()底层调用的就是valueOf()方法,只要是打印在控制台上的都是字符串        System.out.println(String.valueOf(true));    }}

StringBuffer类

思考:

  • 频繁使用字符串拼接会有什么影响?

  • java中字符串是不可变的,每拼接一次都会产生一个新的字符串

  • 字符串是存在字符串常量池中的,频繁使用字符串拼接会占用大量的方法区空间

为了避免以上问题我们就可以使用到StringBuffer类

//java.lang.StringBufferpublic class StringBufferTest {    public static void main(String[] args) {        //创建一个初始化容量为16个 byte[] 数组(字符串缓冲区对象)        StringBuffer strBuffer = new StringBuffer();        //拼接字符串调用 append()方法        //append()方法底层会调用 System.arraycopy()方法,效率较低        //append()再追加时,如果byte[]满了之后会自动扩容        strBuffer.append(1);        strBuffer.append('q');        strBuffer.append(3.14);        strBuffer.append("abc");        System.out.println(strBuffer);//1q3.14abc        //StringBuffer可以进行一定的优化        //在创建StringBuffer时尽可能可能给定一个合适的初始化容量        //从而减少底层数组的扩容次数        //指定初始化容量的字符串缓冲区        StringBuffer newstrBuffer = new StringBuffer(100);    }}

StringBuilder类

它的用法与StringBuffer十分相似,但是也有很大的区别:

  • StringBuffer中的方法都有synchronized关键字修饰,表示StringBuffer在多线程编译环境下是安全的

  • StringBuilder中方法没有synchronized关键字修饰,表示StringBuilder在多线程编译环境下是不安全的

到此,关于“Java中String类、StringBuffer和StringBuilder怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中String类、StringBuffer和StringBuilder怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中String类、StringBuffer和StringBuilder怎么使用

这篇文章主要介绍“Java中String类、StringBuffer和StringBuilder怎么使用”,在日常操作中,相信很多人在Java中String类、StringBuffer和StringBuilder怎么使用问题上存在疑惑,小编
2023-06-30

Java中String、StringBuffer和StringBuilder的区别是什么

这篇文章主要讲解了“Java中String、StringBuffer和StringBuilder的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中String、String
2023-06-27

java中String StringBuffer和StringBuilder的区别是什么

这篇文章主要介绍“java中String StringBuffer和StringBuilder的区别是什么”,在日常操作中,相信很多人在java中String StringBuffer和StringBuilder的区别是什么问题上存在疑惑,
2023-06-28

浅析Java中StringBuffer和StringBuilder的使用

当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。本文就来和大家简单聊聊这二者的使用与区别吧,希望对大家有所帮助
2023-05-17

Java中String、StringBuffer、StringBuilder的区别是什么

本篇内容主要讲解“Java中String、StringBuffer、StringBuilder的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中String、StringBuf
2023-06-04

java中String、StringBuilder、StringBuffer三者有什么区别

这篇文章给大家介绍java中String、StringBuilder、StringBuffer三者有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。可变性首先,String是字符串,我们一般这样声明:String
2023-06-06

java中String和StringBuffer怎么用

这篇文章主要为大家展示了“java中String和StringBuffer怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中String和StringBuffer怎么用”这篇文章吧。
2023-06-03

java中String、StringBuffer与StringBuilder的区别是什么

这篇文章主要介绍“java中String、StringBuffer与StringBuilder的区别是什么”,在日常操作中,相信很多人在java中String、StringBuffer与StringBuilder的区别是什么问题上存在疑惑,
2023-06-21

Java StringBuffer类怎么使用

本篇内容介绍了“Java StringBuffer类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!StringBuffer类Stri
2023-06-29

Java中Sring和StringBuffer、StringBuilder间有什么区别

这篇“Java中Sring和StringBuffer、StringBuilder间有什么区别”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一
2023-06-27

在 Java 中如何运用 StringBuilder 类?(java中怎么用stringbuilder类)

在Java编程中,StringBuilder类是一个非常实用的工具,它允许我们高效地进行字符串的拼接和修改操作。下面我们将详细介绍在Java中如何使用StringBuilder类。一、StringBuilder类的基本概念
在 Java 中如何运用 StringBuilder 类?(java中怎么用stringbuilder类)
Java2024-12-14

怎么使用C#的StringBuilder和string

本篇内容主要讲解“怎么使用C#的StringBuilder和string”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用C#的StringBuilder和string”吧!1.string
2023-06-25

java中stringBuilder怎么使用

在Java中,StringBuilder类提供了一种可变的字符串对象,可以用于高效地构建字符串。以下是一些常见的StringBuilder的使用方法:创建一个空的StringBuilder对象:StringBuilder sb = new
2023-10-21

Java 中 String 类与 StringBuilder 的区别究竟有哪些?(Java String类与StringBuilder的区别是什么)

在Java编程中,String类和StringBuilder类都是用于处理字符串的重要类。虽然它们都可以用来表示和操作字符串,但在性能、可变性和使用场景等方面存在着明显的区别。一、String类String类表示不
Java 中 String 类与 StringBuilder 的区别究竟有哪些?(Java String类与StringBuilder的区别是什么)
Java2024-12-21

java中的stringBuilder怎么使用

在Java中,StringBuilder是一个可变的字符串类,用于构建字符串,提供了很多有用的方法来操作字符串。要使用StringBuilder类,首先需要创建一个StringBuilder对象。可以通过以下方式来创建一个空的StringB
2023-08-16

在 Java 中如何高效使用 StringBuilder?(java中的stringBuilder怎么使用)

在Java编程中,StringBuilder是一个非常实用的类,它提供了一种高效的方式来处理字符串的拼接和修改。本文将详细介绍StringBuilder的使用方法,帮助你在Java开发中更加高效地处理字符串。一、StringBuilder的基本概
在 Java 中如何高效使用 StringBuilder?(java中的stringBuilder怎么使用)

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录