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;哈…

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

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

java多线程之ThreadLoal详解

一、ThreadLocal简介 多线程访问同一个共享变量时特别容易出现并发问题&#xff0c;特别是在多个线程需要对一个共享变量进行写入时。为了保证线程安全&#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 封装的过渡与动画

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

使用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 这个好像必须要吧 主键默…

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

阳光板温室多为文洛型&#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对…

idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率

idea中常用的快捷键以及一些奇淫技巧 &#xff0c; 加快我们的开发效率 &#xff01;&#xff01;&#xff01; 知道类名查找你本地以的类 &#xff08;你pom中依赖的类你自己创建的类&#xff09;------------- ctrlshiftt 修改你创建的变量 以及你后面都引用的变量 &#x…

apache2 php mysql_二、Linux服务器apache2+PHP7+mysql环境配置

关于网站搭建的基础知识&#xff0c;请见我的另一篇文章https://www.jianshu.com/p/9c65fcb14e4f此处不加赘述。本文仅介绍Linux服务器环境的配置。一、安装包下载与安装1.安装apache2sudo apt-get install apache22.安装PHP//-y的意思是全部默认选择yes//8条命令分8次输入//1s…

前端给后端传递数据的时候,有些后端自己可以获取到的值应该由前端传递吗?

前端给后端传递数据的时候,有些后端自己可以获取到的值应该由前端传递吗? 场景: 1.比如我向后端传递一个学生做的试卷. 2.后端需要我把学生的答案和标准答案(在获取试卷的时候给我的,我知道很扯淡)同时传递给他. 我认为标准答案没必要传给他 ,因为他可以根据我传给他的试卷…

mysql备份去掉一个库_MySQL备份与恢复(3)mysqldump备份多个库

一、mysqldump的工作原理、利用mysqldump命令备份数据的过程&#xff0c;实际上就是把数据从mysql库以逻辑的sql语句的形式直接输出或生成备份的文件的过程利用这个备份文件恢复的时候的原理&#xff1f;就是把备份的sql命令再执行一遍。二、备份多个库mysql>show databases…

JS 深浅拷贝

在日常开发当中那面会遇到对象拷贝问题 一、对象浅拷贝&#xff08;shallowClone&#xff09; 使用 Object.assign 把源对象自身的、可枚举的属性拷贝到目标对象上 var person {name: 张三,age: 18,sex: 男,hobbies: [篮球, 足球, 排球],sayName: function () {console.log(t…

MySQL 查询速度慢与性能差的原因与解决方法

MySQL 查询速度慢与性能差的原因与解决方法 更新时间&#xff1a;2019年09月26日 18:05:47 作者&#xff1a;Microtiger 随着网站数据量与访问量的增加&#xff0c;MySQL 查询速度慢与性能差的问题就日渐明显&#xff0c;这里为大家分享一下解决方法,需要的朋友可以参考下 一…

mysql+跨服务器+写入_MySQL中使用FREDATED引擎实现跨数据库服务器、跨实例访问

跨数据库服务器&#xff0c;跨实例访问是比较常见的一种访问方式&#xff0c;在Oracle中可以通过DB LINK的方式来实现。对于MySQL而言&#xff0c;有一个FEDERATED存储引擎与之相对应。同样也是通过创建一个链接方式的形式来访问远程服务器上的数据。本文简要描述了FEDERATED存…

MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)

MYSQL避免全表扫描 1.对查询进行优化&#xff0c;应尽量避免全表扫描&#xff0c;首先应考虑在 where 及 order by 涉及的列上建立索引 2.应尽量避免在 where 子句中对字段进行 null 值判断&#xff0c;否则将导致引擎放弃使用索引而进行全表扫描 如&#xff1a;select id f…

@SuppressWarnings使用的正确姿势

SuppressWarnings比较常见&#xff0c;理解和使用起来都很简单。 但是就这这个机会系统的整理一下。 通过源码可以看出&#xff0c;支持在类、属性、方法、参数、构造方法、本地变量上使用。 SuppressWarnings注解的使用有三种&#xff1a; SuppressWarnings(“unchecked”)…

mysql5.7.3安装教程_最新mysql 5.7.23安装配置图文教程

2018年最新MySQL5.7详细安装与配置&#xff0c;总共分为四步&#xff0c;其中环境变量配置不是必须的。1、安装包下载2、安装过程3、环境变量配置4、连接测试一、官网下载MYSQL安装包2.选择合适你电脑系统的版本进行安装。如果有网络&#xff0c;选择在线安装的版本&#xff0c…

MySQL 添加where 1= 1 是否会引起索引失效

背景 在检查数据库的执行效率的时候&#xff0c;发现了一条查询极慢的查询sql。sql的例子如下&#xff1a; EXPLAIN SELECT * FROM user_point_detail_info WHERE 11 AND deleted FALSE AND app_id 2010001 AND point > 10 AND add_time BETWEEN "2021-03-12 17:0…