返回顶部
首页 > 资讯 > 后端开发 > Python >Java有哪些操作字符串的类?区别在哪?
  • 422
分享到

Java有哪些操作字符串的类?区别在哪?

2024-04-02 19:04:59 422人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

操作字符串的类都有哪些?区别是什么? 操作字符串的类主要用三个,分别是String类,StringBuffer类和StringBuilder类. 不可变字符串 Str

操作字符串的类都有哪些?区别是什么?

操作字符串的类主要用三个,分别是String类,StringBuffer类和StringBuilder类.

不可变字符串

String类


public class StringTest {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");	
        System.out.println(s1 == s2);	// true
        System.out.println(s2 == s3);	// false
        s2 = "abc" + "def";
        System.out.println(s1 == s2);	// false
        String s4 = "abcdef";
        System.out.println(s4 == s2);	// true
    }
}

1.当使用=对String类初始化的时候,会在常量池创建对象,将引用s1指向常量池中的地址.

2.创建s2的时候,会先在常量池中检查是否有"abc"的对象,如果有则直接将s2指向常量池中的"abc".所以s1和s2指向的是相同的对象.

3.使用new关键字创建String对象的时候,会在堆空间中开辟一块内存,然后在堆中对s3进行初始化,s3指向的是堆内存空间中的一块区域.

4.当我们对s2进行修改的时候,其实是在常量池中添加了新的对象"abcdef",此时我们创建新的对象s4会和创建s2的步骤相同.s4在常量池中找到了"abcdef",所以直接指向这个对象.

当我们对String类型的变量进行操作的时候,其实每次改变都是创建除了新的对象.

可变字符串

StringBuffer和StringBuilder类中都提供了增删字符串的方法,下面展示一个在原始对象上增加新的字符的示例.


public class StringTest2 {
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer("abc");
        StringBuilder sb2 = new StringBuilder("abc");
        System.out.println(sb1.hashCode());	// 460141958
        System.out.println(sb2.hashCode());	// 1163157884
        sb1.append("def");
        sb2.append("def");
        System.out.println(sb1.hashCode()); // 460141958
        System.out.println(sb2.hashCode()); // 1163157884
    }
}

通过这个例子我们能清晰看到,s1和s2在增加元素前后仍旧是同一个对象.
StringBuffer和StringBuilder都继承了AbstractStringBuilder类.

StringBuffer类

和StringBuilder类对比发现,StringBuffer类中的方法没有使用synchronized 关键字进行修饰.


   @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }

StringBuilder类


  @Override
    public synchronized StringBuffer append(Object obj) {
        toStrinGCache = null;
        super.append(String.valueOf(obj));
        return this;
    }

AbstractStringBuilder类的append方法

扩容方法:调用ensureCapacityInternal()方法检查初始char[] value空间是否足够,如果不够的话,就进行扩容操作.


 public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        // 查看空间是否足够
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }

 private void ensureCapacityInternal(int minimumCapacity) {
        // overflow-conscious code
        // 如果空间不够就重新开辟一块新的空间
        if (minimumCapacity - value.length > 0) {
            value = Arrays.copyOf(value,
                    newCapacity(minimumCapacity));
        }
    }

copyOf方法:重新创建一个新的char数组然后将原数组数据拷贝到新数组去.


    public static char[] copyOf(char[] original, int newLength) {
        char[] copy = new char[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

小结

Java操作字符串的类主要有三个,分别是String类,StringBuffer类和StringBuilder类.这三个类的底层都是以char[]形式保存字符串对象的.他们之间的区别主要体现在:

1.String类型进行修改操作之后相当于重新创建对象,StringBuffer和StringBuilder进行增删操作都是针对同一个对象.

2.StringBuffer中的大部分方法都没有使用synchronized关键字修饰,所以性能更高(我刷题的时候也都是写这个).单线程情况下首选使用StringBuffer类,多线程环境下需要使用StringBuilder类保证线程安全.

3.如果字符串声明之后不需要进行改动,则直接声明String类是最好的选择,不使用new关键字声明String对象时,它不会再堆内存中开辟空间,而是直接指向String常量池.这样可以实现复用,降低资源消耗.

扩展阅读

Java基础系列第一弹之方法重载和方法重写的区别
Java基础系列第二弹之Java多态成员访问的特点

到此这篇关于Java有哪些操作字符串的类?区别在哪?的文章就介绍到这了,更多相关Java操作字符串的类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java有哪些操作字符串的类?区别在哪?

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

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

猜你喜欢
  • Java有哪些操作字符串的类?区别在哪?
    操作字符串的类都有哪些?区别是什么? 操作字符串的类主要用三个,分别是String类,StringBuffer类和StringBuilder类. 不可变字符串 Str...
    99+
    2024-04-02
  • java中操作字符串都有哪些类
    在java 中操作字符串有:1.String;2.StringBuffer;3.StringBuilder在java中操作字符串有:String、StringBuffer、StringBuilder,其中String声明的是不可变的对象,每...
    99+
    2024-04-02
  • java字符串操作有哪些
    java中的字符串操作有:length()函数,计算字符串的长度;2.isEmpty()函数,判断字符串是否为空;3.concat()函数,将指定的字符串参数连接到字符串;4.hashCode()函数,返回字符串的哈希码;java...
    99+
    2024-04-02
  • Java字符串操作的技巧有哪些
    本篇内容介绍了“Java字符串操作的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!01、如何在字符串中获取不同的字符及其数量?这道...
    99+
    2023-06-27
  • Java字符串类型有哪些
    Java 字符串类型有以下几种:1、String 类型String 类型是 Java 中最常用的字符串类型,它是不可变的,即一旦创建...
    99+
    2023-05-13
    Java字符串类型 Java
  • 字符串有哪些操作方法
    小编给大家分享一下字符串有哪些操作方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!字符串属性和方法字符串用于表示和操作字符序列...
    99+
    2024-04-02
  • 字符串 len == 0 和 字符串== "" 的区别有哪些
    这篇文章主要讲解了“字符串 len == 0 和 字符串== "" 的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“字符串 len == 0 和 字符串== &...
    99+
    2023-06-15
  • Swift5有哪些常用的字符串操作
    本篇内容介绍了“Swift5有哪些常用的字符串操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. Sw...
    99+
    2024-04-02
  • Python字符串操作方法有哪些
    本篇内容主要讲解“Python字符串操作方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python字符串操作方法有哪些”吧!Python字符串中字符大小写的变换: * S.l...
    99+
    2023-06-17
  • 有哪些shell字符串操作方法
    本篇内容主要讲解“有哪些shell字符串操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些shell字符串操作方法”吧!1,取得字符串长度代码如下:string=abc12342341...
    99+
    2023-06-09
  • js中操作字符串的方法有哪些
    小编给大家分享一下js中操作字符串的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!var a = '世界上最远...
    99+
    2024-04-02
  • Python中的字符串操作函数有哪些?
    Python作为一门强大的编程语言,提供了许多有用的字符串操作函数,用于处理和操作字符串数据。本文将介绍Python中常用的字符串操作函数,并提供一些具体的代码示例。len() 函数:用于计算字符串的长度。示例代码:string = &qu...
    99+
    2023-10-22
    字符串操作函数: 字符串长度:len() 字符串连接:join() 字符串分割:split()
  • Python中的字符串操作技巧有哪些?
    Python中的字符串操作技巧有哪些?字符串操作是Python编程中非常常见和重要的一部分。Python提供了许多内置函数和方法来进行字符串操作,让我们能够高效地处理和处理文本数据。下面我将介绍一些常用的字符串操作技巧,并给出具体的代码示例...
    99+
    2023-10-22
    连接(join) 切片(slice) 查找(find)
  • python中字符串操作方法有哪些
    这期内容当中小编将会给大家带来有关python中字符串操作方法有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决...
    99+
    2023-06-14
  • VBS中有哪些字符串操作函数
    VBS中有哪些字符串操作函数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 Split(expression, delimiter, count, compare)返回基于...
    99+
    2023-06-08
  • php中字符串有哪些操作方法
    这篇文章主要介绍“php中字符串有哪些操作方法”,在日常操作中,相信很多人在php中字符串有哪些操作方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php中字符串有哪些操作方法”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-20
  • Redis中SDS和C字符串的区别有哪些
    这篇文章主要介绍Redis中SDS和C字符串的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!redis底层没有使用“C字符串”来表示,而是用自己构建的“SDS抽象类型”进行...
    99+
    2024-04-02
  • Java中的运算符和字符串类型有哪些
    本篇内容介绍了“Java中的运算符和字符串类型有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java运算符:自增和自减:放在前面是先把...
    99+
    2023-06-02
  • JavaScript字符串处理常见操作有哪些
    这篇文章给大家分享的是有关JavaScript字符串处理常见操作有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、字符串合并操作:“ + ”var iNum01&...
    99+
    2024-04-02
  • Python字符串常规操作方法有哪些
    一、前言在Python开发的过程中,为了实现某项功能,经常需要对某些字符串进行特殊的处理,如拼接字符串、截取字符串、格式化字符串等。二、拼接字符串在使用“+”运算符可完成对多个字符串的拼接,“+”运算符可以连接多个字符串并产生一个字符串对象...
    99+
    2023-05-14
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作