iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中String类、StringBuffer和StringBuilder怎么使用
  • 220
分享到

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

2023-06-30 10:06:43 220人浏览 薄情痞子
摘要

这篇文章主要介绍“Java中String类、StringBuffer和StringBuilder怎么使用”,在日常操作中,相信很多人在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怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Java中String类、StringBuffer和StringBuilder怎么使用

本文链接: https://www.lsjlt.com/news/328118.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Java中String类、StringBuffer和StringBuilder怎么使用
    这篇文章主要介绍“Java中String类、StringBuffer和StringBuilder怎么使用”,在日常操作中,相信很多人在Java中String类、StringBuffer和StringBuilder怎么使用问题上存在疑惑,小编...
    99+
    2023-06-30
  • 详解Java中String,StringBuffer和StringBuilder的使用
    目录1.String类2.String对象创建的两种方式3.String常用方法4.StringBufferString和StringBuffer的转换StringBuffer的常用...
    99+
    2022-11-13
  • JAVA基础类库之String类,StringBuffer类和StringBuilder类
    目录引言String类String类构造方法 String常用方法:简单介绍的方法详细介绍的方法StringBuffer/StringBuilder常用方法StringBu...
    99+
    2022-11-12
  • Java详细分析String类与StringBuffer和StringBuilder的使用方法
    目录String类基本概念String字符串的存储原理String类的常用构造方法String类中常用方法StringBuffer类StringBuilder类String类基本概念...
    99+
    2022-11-13
  • Java中String和StringBuffer及StringBuilder 有什么区别
    目录String类为什么是immutable(不可变的)如何保证不可变string类为不可变对象的好处前言: String 是 Java 语言非常基础和重要的类,提供了构造...
    99+
    2022-11-13
  • java中String StringBuffer和StringBuilder的区别是什么
    这篇文章主要介绍“java中String StringBuffer和StringBuilder的区别是什么”,在日常操作中,相信很多人在java中String StringBuffer和StringBuilder的区别是...
    99+
    2023-06-28
  • Java中String、StringBuffer和StringBuilder的区别是什么
    这篇文章主要讲解了“Java中String、StringBuffer和StringBuilder的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中String、String...
    99+
    2023-06-27
  • Java中String、StringBuffer、StringBuilder的区别是什么
    本篇内容主要讲解“Java中String、StringBuffer、StringBuilder的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中String、StringBuf...
    99+
    2023-06-04
  • 浅析Java中StringBuffer和StringBuilder的使用
    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilde...
    99+
    2023-05-17
    Java StringBuffer StringBuilder使用 Java StringBuffer StringBuilder Java StringBuffer Java StringBuild
  • java中String、StringBuilder、StringBuffer三者有什么区别
    这篇文章给大家介绍java中String、StringBuilder、StringBuffer三者有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。可变性首先,String是字符串,我们一般这样声明:String...
    99+
    2023-06-06
  • java中String、StringBuffer与StringBuilder的区别是什么
    这篇文章主要介绍“java中String、StringBuffer与StringBuilder的区别是什么”,在日常操作中,相信很多人在java中String、StringBuffer与StringBuilder的区别是什么问题上存在疑惑,...
    99+
    2023-06-21
  • java中String和StringBuffer怎么用
    这篇文章主要为大家展示了“java中String和StringBuffer怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中String和StringBuffer怎么用”这篇文章吧。...
    99+
    2023-06-03
  • Java中Sring和StringBuffer、StringBuilder间有什么区别
    这篇“Java中Sring和StringBuffer、StringBuilder间有什么区别”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一...
    99+
    2023-06-27
  • Java StringBuffer类怎么使用
    本篇内容介绍了“Java StringBuffer类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!StringBuffer类Stri...
    99+
    2023-06-29
  • 怎么使用C#的StringBuilder和string
    本篇内容主要讲解“怎么使用C#的StringBuilder和string”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用C#的StringBuilder和string”吧!1.string...
    99+
    2023-06-25
  • java中stringBuilder怎么使用
    在Java中,StringBuilder类提供了一种可变的字符串对象,可以用于高效地构建字符串。以下是一些常见的StringBuil...
    99+
    2023-10-21
    java
  • java中的stringBuilder怎么使用
    在Java中,StringBuilder是一个可变的字符串类,用于构建字符串,提供了很多有用的方法来操作字符串。要使用StringB...
    99+
    2023-08-16
    java stringBuilder
  • Java中String类怎么用
    这篇文章主要为大家展示了“Java中String类怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中String类怎么用”这篇文章吧。大部分编程语言都能够处理字符串(String)。...
    99+
    2023-06-02
  • StringBuffer怎么在Android中使用
    StringBuffer怎么在Android中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、StringBuffer对象的初始化StringBuffer对象的初始化不像...
    99+
    2023-05-30
    android stringbuffer
  • Java中String怎么使用
    今天小编给大家分享一下Java中String怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.String概述Str...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作