Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释

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);}12345678910111213141516171819

源码分析:

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

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

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

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

String字符串的concat()方法源码分析

1.java提供了“+”运算符能进行字符串的连接操作。
  • API里提供的是:
    API关于字符串连接
  • 首先,string类型是不可变的,所以,通过StringBuffer或者StringBuilder对象实现了字符串的拼接。通过创建StringBuffer或者StringBuilder对象,然后调用其中的append()方法,得到一个拼接后的StringBuffer或者StringBuilder对象,最后调用toString()方法,返回得到的String对象的地址值。
    举例图解:“+”的字符串连接举例图解
2.concat()方法源码分析
  • 源码:
 public String concat(String str) {//获取传入字符串的长度int otherLen = str.length();//如果传入字符串长度为0,输出原字符串if (otherLen == 0) {return this;}//获取原字符串的长度int len = value.length;//调用Arrays.copyOf()方法,传入原字符串,和原字符串和传入字符串长度之和,返回连接后的字符数组,该数组从0-len包含着原字符串元素char buf[] = Arrays.copyOf(value, len + otherLen);//调用getChars()方法,传入扩展后的字符数组和原字符串长度str.getChars(buf, len);//根据生成的拼接后的字符数组创建一个新的String对象return new String(buf, true);}
 public static char[] copyOf(char[] original, int newLength) {//根据传入的字符串长度之和创建一个新的字符数组char[] copy = new char[newLength];//调用arraycopy()方法//将原数组元素从索引为0的位置开始复制,到另一个数组,从新数组索引为0的位置开始,复制的元素个数为调用Math.min(a,b)方法后得到的长度System.arraycopy(original, 0, copy, 0,Math.min(original.length, newLength));//返回的字符数组是包含着原字符串元素的扩展后的字符数组return copy;}
 public static int min(int a, int b) {//三元表达式判断a和b长度,输出a和b之间的最小值return (a <= b) ? a : b;}
   void getChars(char dst[], int dstBegin) {//调用System.arraycopy()方法//将传入字符串从0的位置开始复制到扩展后的字符串,从原字符串长度的位置开始复制,复制的元素个数为传入字符穿的长度System.arraycopy(value, 0, dst, dstBegin, value.length);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大于小于优化_架构 - 以MySQL为例,详解数据库索引原理及深度优化

一、摘要本文以MySQL数据库为研究对象&#xff0c;讨论与数据库索引相关的一些话题。特别需要说明的是&#xff0c;MySQL支持诸多存储引擎&#xff0c;而各种存储引擎对索引的支持也各不相同&#xff0c;因此MySQL数据库支持多种索引类型&#xff0c;如BTree索引&#xff0c;哈…

Xftp 基本使用

vmware tool 安装 连接终端Xshell5_安装vmtools_

MySQL:日期函数、时间函数总结

MySQL 获得当前日期时间 函数 获得当前日期时间&#xff08;date time&#xff09;函数&#xff1a;now() mysql> select now();--------------------- | now() | --------------------- | 2008-08-08 22:20:46 | ---------------------获得当前日期时间&#xff08;date…

Vue 组件的自定义事件

绑定自定义事件 // 第一种方式 <Demo demo"test"/> || <Demo v-on:demo"test"/>// 第二种方式 <Demo ref"demo"/> ... mounted() {this.$refs.xxx.$on(demo, this.test) } // 如果想自定义事件只能触发一次&#xff0c;可以使…

c++byte数组和文件的相互转换_终于!word、excel、ppt文件相互转换技巧来了!

不知道大家在用Office软件的时候&#xff0c;有没有遇到过这样的问题。做了个Word文档总结&#xff0c;却需要转换成PPT上台汇报&#xff1b;做了个Word表格统计&#xff0c;却需要转换成Excel进行分析&#xff1b;做了个Excel图表分析&#xff0c;却需要放到Word或PPT上&#…

全局事件总线 (GlobalEventBus)

一、一种组件间通信的方式&#xff0c;适用于任意组件间通信。 二、建立 bus&#xff1a; Vue.prototype.bus new Vue();三、使用 bus bus 上注册自定义事件 this.bus.$emit(customEvent, params);任意组件监听 this.bus.$on(customEvent, function (params) {console.log…

java多线程之ThreadLoal详解

一、ThreadLocal简介 多线程访问同一个共享变量时特别容易出现并发问题&#xff0c;特别是在多个线程需要对一个共享变量进行写入时。为了保证线程安全&#xff0c;一般使用者在访问共享变量时需要进行适当的同步 同步一般是通过加锁来实现的,但这对用户有一定要求,加重了使用…

python 心电处理包_python 黏包现象及其解决方案

一、数据缓冲区缓冲区(buffer)&#xff0c;它是内存空间的一部分。也就是说&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;这些存储空间用来缓冲输入或输出的数据&#xff0c;这部分预留的空间就叫做缓冲区&#xff0c;显然缓冲区是具有一定大小的。二、为什么要缓…

消息订阅与发布(pubsub)

一、一种组件间通信的方式&#xff0c;适用于任意组件间通信。 二、使用步骤&#xff1a; 安装 pubsub&#xff1a;npm i pubsub-js引入&#xff1a;import pubsub from pubsub-js接收数据&#xff1a;A组件想接收数据&#xff0c;则在A组件中订阅消息&#xff0c;订阅的回调在…

JVM经典五十问

文章目录1.什么是JVM?内存管理2.能说一下JVM的内存区域吗&#xff1f;3.说一下JDK1.6、1.7、1.8内存区域的变化&#xff1f;4.为什么使用元空间替代永久代作为方法区的实现&#xff1f;5.对象创建的过程了解吗&#xff1f;6.什么是指针碰撞&#xff1f;什么是空闲列表&#xf…

增量更新同步_OneDrive增量更新功能正式推出 仅同步文件更改部分降低网络占用...

微软的云存储应用OneDrive目前用户量还是蛮多的&#xff0c;不过在功能更新方面OneDrive动作相对来说还是有些慢的。比如非常实用的增量更新功能直到最近微软才正式推出&#xff0c;现在所有个人和企业级用户都可以使用增量更新功能喽。增量更新功能还是有网友在 2014 年向微软…

Vue.$nextTick

一、语法&#xff1a;this.$nextTick(回调) 二、在下一次 DOM 更新结束后执行其指定的回调函数 三、啥时候调用&#xff1a;当改变数据后&#xff0c;要基于更新后的新 DOM 进行某些操作时&#xff0c;要在 nextTick 所指定的回调函数中执行

div靠边隐藏_css如何隐藏div不占位置?

display 属性依照词义真正隐藏元素。将 display 属性设为 none 确保元素不可见并且连盒模型也不生成。使用这个属性&#xff0c;被隐藏的元素不占据任何空间。一旦 display 设为 none 任何对该元素直接打用户交互操作都不可能生效。此外&#xff0c;读屏软件也不会读到元素的内…

MySQL:错误代码1215 无法添加外键约束的解决思路

环境说明: ※MySQL ver:5.7 当你需要添加外键约束的时候,却发现mysql报了个1215错误,一脸懵逼的找到这个博客,那你的问题可能就会得到解决. 解决思路 1.检查两个字段的数据类型是否一致 2.检查两个字段的数据长度是否一致(有时候不指定int长度,长度是10,有时候是11&#xff0…

Vue 封装的过渡与动画

一、作用&#xff1a;在插入、更新或移除DOM元素时&#xff0c;在合适的时候给元素添加样式类名 二、图示 三、写法&#xff1a; 元素进入的样式 v-enter | v-enter-active | v-enter-to元素离开的样式 v-leave | v-leave-active | v-leave-to使用 transition 包裹要过渡的元…

各纬度气候分布图_地理:世界各种气候类型分布图(高清版)汇总!以及解答分析哦~...

各种气候类型分布图送给大家&#xff0c;点开看放大更清晰哟&#xff01;世界气候类型分布图▼热带气候类型分布图▼热带雨林气候分布图▼热带草原气候分布图▼热带季风气候分布图▼热带沙漠气候分布图▼温带气候分布图▼地中海气候分布图▼亚热带季风和季风性湿润气候分布图▼…

使用navicat for mysql 创建外键foreign keys时,总会自动创建索引indexs

使用navicat for mysql 创建外键foreign keys时&#xff0c;总会自动创建索引indexs。如果删除这个索引就会提示错误error 1553:cann’t drop index…:needed in a foreign key constraint。请教各位&#xff0c;该如何解决呢&#xff0c;不想要indexs 这个好像必须要吧 主键默…

Vue 脚手架配置代理

一、在 vue.config.js 中添加配置 devServer: {proxy: http://localhost:5000 }优点&#xff1a;配置简单&#xff0c;请求资源时直接发送给前端&#xff08;8080&#xff09;即可缺点&#xff1a;不能配置多个代理&#xff0c;不能灵活的控制请求是否走代理工作方式&#xff…

固定 顶部_优质的阳光板温室的顶部应该如此安装,专业的人做专业的事

阳光板温室多为文洛型&#xff0c;多采用一跨多顶&#xff0c;外形现代&#xff0c;结构稳定&#xff0c;形式美观大方&#xff0c;视觉流畅&#xff0c;保温性能卓越&#xff0c;透光率适中&#xff0c;多雨槽&#xff0c;大跨度&#xff0c;排水量大&#xff0c;抗风能力强&a…

json对象、json字符串的区别和相互转换

开发时&#xff0c;json字符串和json对象傻傻分不清楚&#xff0c;ajax异步请求后&#xff0c;会根据返回的data值判断请求是否成功&#xff0c;访问data.msg会提示‘undefined’&#xff0c;将data转换为json对象即可。 一、json对象、json字符串的区别 1、json对象 json对…