String concat(String str)使用小结
作者:小黑孩666 发布时间:2023-02-28 05:52:13
标签:String,concat,String,str
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


猜你喜欢
- 前言C#基于NAudio工具对Wav音频文件进行剪切,将一个音频文件剪切成多个音频文件注:调用方法前需要导入NAudio.dll或者在NuG
- 借用@Caching实现入参是基本类型的:@Caching(evict={@CacheEvict(value = Cache.CONSTAN
- 我本地的springboot版本是2.5.1,后面的分析都是基于这个版本 <parent> &nbs
- 《IDEA 破解新招 - 无限重置30天试用期》,这种方法适用idea2021以下所有版本,亲测idea2020.3成功激活,其他版本自测吧
- 获得redis所有的key-value运行结果:redis配置文件需要序列化@Bean public RedisT
- 大多数开发人员现在还在使用if else的过程结构,曾看过jdon的banq大哥写的一篇文章,利用command,aop模式替代if els
- 多态是同一个行为具有多个不同表现形式或形态的能力。多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功
- 一、流程图二、Token1、token是一种客户端认证机制,是一个经过加密的字符串,安全性强,支持跨域2、用户第一次登录,服务器通过数据库校
- 简介Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型。泛型可以用于类、接口
- 目录SpringBoot整合OpenApiOpenAPI依赖编写配置类改造优化OpenAPI常用注解介绍实体类controller类演示网上
- 继承ClassLoader并且重写findClass方法就可以自定义一个类加载器,具体什么是类加载器以及类加载器的加载过程与顺序下次再说,下
- 一般来说,修改框架的源代码是极其有风险的,除非万不得已,否则不要去修改。但是今天却小心翼翼的重构了Mybatis官方提供的与Spring集成
- 写应用程序的过程中,弹窗是个避免不了的功能,显示中,假设弹窗背景色和主窗口背景色相差不多,甚至是一样的时候,就会存在一个比较严重的人机交互和
- 前言本文主要介绍其具体的实现思路(视频仅有代码输入,并无过程介绍等),同时,在原本实现的基础上,进行了多处修改和优化,具体参见下面的内容。优
- 内容:1、滑动优化(滑动时不加载图片,停止才加载)2、第一次进入时手动加载代码如下:1、界面布局<?xml version="
- 昨天给各位总结了本人学习springboot整合mybatis第一阶段的一些学习心得和源码,主要就算是敲了一下SpringBoot的门儿,希
- mybatis if test判断BigDecimal遇到的坑<update id="test" paramete
- 前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作。相信很多上班族都会有这种感觉。最近对NFC进行写卡操作,需要计算一个校验位。一
- 1 简介之前我们在文章《K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes》成功地在Ubuntu上安
- Android studio 出现 Unsupported major.minor version 52.0解决办法 最近更新了