String concat(String str)使用小结

作者:小黑孩666 时间:2023-02-28 05:52:13 

String类中的concat()方法的使用

concat(String str)

用法concat(String string) 返回值是String类型
说明将指定字符串拼接到此字符串的末尾

示例:

String str = "abc";
str = str.concat("123");
System.out.println(str);

输出结果:

abc123

Java中String类的concat方法

在了解concat()之前,首先需要明确的是String的两点特殊性。

  • 长度不可变

  • 值不可变

这两点从源码中对String的声明可以体现:

private final char[] value ;

其中final对应值的不可更改的特性;而char[]对应String是长度不可更改的特性。

因此,当我们对String进行拼接后,产生的应该是一个新的字符串。
对于这一点,我们可以对concat()进行源码的解读得出同样的结论。

@param  str 需要拼接到原字符串的新串
@param  otherlen 新串的长度
@param  len 原字符串的长度
@param  buf 存放最终字符串的字符数组(长度为len+otherlen)
@method  copyOf(char[] original, int newLength)
复制指定的数组,截取或用 null 字符填充(如有必要),以使副本具有指定的长度。    
@method getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。

public String concat(String str) {
       int otherLen = str.length();
       if (otherLen == 0) {
           return this;
       }
       int len = value.length;
       char buf[] = Arrays.copyOf(value, len + otherLen);
       str.getChars(buf, len);
       return new String(buf, true);
   }

源码分析:

concat()方法首先获取拼接字符串的长度,判断这个字符串长度是否为0(判断这个用来拼接的字符串是不是空串),如果是就返回原来的字符串(等于没有拼接);否则就获取源字符串的长度,创建一个新的char[]字符数组,这个字符数组的长度是拼接字符串的长度与源字符串的长度之和,通过Arrays类的copyOf方法复制源数组,然后通过getChars方法将拼接字符串拼接到源字符串中,然后将新串返回。

API中也对这个方法进行了解释:

  • 如果参数字符串的长度为 0,则返回此 String 对象。

  • 否则,创建一个新的 String对象,用来表示由此 String 对象表示的字符序列和参数字符串表示的字符序列连接而成的字符序列。

综上,当对String对象进行拼接时,会创建一个新的字符串来存储新串。

来源:https://blog.csdn.net/expect521/article/details/81029585

标签:String,concat,String,str
0
投稿

猜你喜欢

  • 一篇文章彻底搞清楚c#中的委托与事件

    2021-09-07 02:24:03
  • java构造函数示例(构造方法)

    2022-05-08 19:06:03
  • 详解Android获取系统内核版本的方法与实现代码

    2023-11-25 14:51:59
  • wpf将表中数据显示到datagrid示例

    2023-06-13 04:14:06
  • Springboot如何添加server.servlet.context-path相关使用

    2023-03-14 10:35:03
  • 基于Spring Boot应用ApplicationEvent案例场景

    2023-08-17 22:38:12
  • 基于Java利用static实现单例模式

    2021-12-20 06:07:32
  • Android使用MulticastSocket实现多点广播图片

    2023-01-16 06:13:57
  • java开发工作中对InheritableThreadLocal使用思考

    2023-11-24 21:46:44
  • 浅析Java编程中枚举类型的定义与使用

    2021-07-04 23:46:16
  • Java 多线程等待优雅的实现方式之Phaser同步屏障

    2023-11-29 09:47:43
  • Mybatis示例讲解注解开发中的单表操作

    2023-08-20 06:20:58
  • C#利用iTextSharp添加PDF水印

    2022-03-23 23:37:44
  • Java 序列化和反序列化实例详解

    2023-11-23 04:43:44
  • java.util.Collection源码分析与深度理解

    2022-07-31 09:05:52
  • 在mybatis中使用mapper进行if条件判断

    2023-08-01 08:09:34
  • Java超细致讲解数组的使用

    2022-07-20 06:25:16
  • Java多线程实现复制文件

    2023-03-21 07:54:17
  • Android onCreate( )方法详细介绍

    2023-02-24 12:27:07
  • Java设计模式之工厂模式(Factory模式)介绍

    2021-10-15 11:13:15
  • asp之家 软件编程 m.aspxhome.com