stringbuffer append方法(java语言:String类的concat方法与StringBuffer类的append方法区别内存状态)

2025-02-09 07:20:03 0

stringbuffer append方法(java语言:String类的concat方法与StringBuffer类的append方法区别内存状态)

本文目录

java语言:String类的concat方法与StringBuffer类的append方法区别内存状态

首先我们先看几个概念:

1:在java内部是对+进行了重载,在处理String的过程中要创建一个StringBuffer对象,用StringBuffer对象的append方法对字符串进行连接,最后调用toString方法返回String字符串。

2: +和concat操作,是先开辟一个要拼接的字符串的空间,在和老字符串一起拼接成一个新的字符串,所以在堆内存中是创建了三块空间的;

然后先来说1和2的区别:line1: 用的是+,+在底层是通过StringBuffer对象的append方法对字符串进行连接,但是他也并不是直接添加的,我们看看他开辟了几块空间?“abc”“def”“ghi”,刚开始开辟了三块堆内存空间,执行一次+,“abcdef”这是第四块内存空间,最后是最终结果“abcdefghi”开辟了第五块堆内存空间,然后其余的被回收。

line2:同样也是开辟了五块堆内存空间,concat()和+号的区别我们可以看下concat()源代码:

public String concat(String str) {    int otherLen = str.length();    if (otherLen == 0) {        return this;    }    int len = value.length;    /*copyOf数组复制,copyOf()的第二个自变量指定要建立的新数组长度,    如果新数组的长度超过原数组的长度,则保留为默认值null或0*/    char buf = Arrays.copyOf(value, len + otherLen);    //将字符从此字符串复制到目标字符数组,len为数组中的起始偏移量    str.getChars(buf, len);    return new String(buf, true);}

我们可以看到concat()方法是通过copyOf(),和getChars();两个方法来拼接数组的。+在底层是通过StringBuffer对象的append方法对字符串进行连接。

最后是StringBuffer:StringBuffer使用时,只会开辟一块内存空间,使用append添加或delete删除其内容时,也是在这一块内存空间中并不会生成多余的空间。所以速度是比较快的而String 每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,对速度的影响一定是相当大的。

java中,定义一个StringBuffer空构造,为什么能通过append添加超过16个字符

这个原理和List、Map、Set等集合类型是一样的,都会有初始容量,因为底层都是利用了array数组进行存储。但无论哪种类型,其增加元素但方法中都会去校验数组长度,并自动扩容。

具体到StringBuffer中,在其append方法里面实际上会在真正加入数组前调用方法:

ensureCapacityInternal(int minimumCapacity)

来确保数组有足够的空间存储,如果没有会自动扩容。

StringBuffer的“append“ 和 String的“+“用来连接字符串哪个好些

String一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。因此我们得出结论:当需要进行频繁修改字符串的操作时先建立StringBuffer类对象进行操作,将最后结果转化成String类对象返回,这样效率会高很多。

stringbuilder与stringbuffer 谁的append方法有关键字

java中String、StringBuffer、StringBuilder的区别java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。1.可变与不可变  String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。    private final char value;  StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。    char value;2.是否多线程安全  String中的对象是不可变的,也就可以理解为常量,显然线程安全。  AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。  StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。看如下源码:1 public synchronized StringBuffer reverse() {2 super.reverse();3 return this;4 }5 6 public int indexOf(String str) {7 return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法8 }  StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。 3.StringBuilder与StringBuffer共同点  StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。  抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。  StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。  最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

请详细说一下java中append()的方法.

Java中的append( )方法其实是创建了一个新的数组,扩大了长度,将需要添加的字符串给复制到这个新的数组中。

JAVA中Stringbuffer有append( )方法:

而Stringbuffer是动态字符串数组,append( )是往动态字符串数组添加,跟“xxxx”+“yyyy”相当‘+’号。

跟String不同的是Stringbuffer是放一起的,String1+String2和Stringbuffer1.append(“yyyy“)虽然打印效果一样,但在内存中表示却不一样、

String1+String2 存在于不同的两个地址内存,Stringbuffer1.append(Stringbuffer2)放再一起。

StringBuffer是线程安全的,多用于多线程。

扩展资料

查看StringBuffer的append()方法

如图所示代码:

1、进入append方法

@Override

public synchronized StringBuffer append(String str) {

toStringCache = null;

super.append(str);

return this;

}

其中toStringCache是Cleared whenever the StringBuffer is modified.

2、进入AbstractStringBuilder的append()方法

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;

}

如果参数str为空返回appendNull(); 该方法最终返回return this.

3、进入ensureCapacityInternal()方法

private void ensureCapacityInternal(int minimumCapacity) {

// overflow-conscious code

if (minimumCapacity - value.length 》 0) {

value = Arrays.copyOf(value,

newCapacity(minimumCapacity));

}

}

copyOf(char original, int newLength)的方法查JDK帮助文档可知:复制指定的数组,复制具有指定的长度。

4、进入String的getChars()方法

public void getChars(int srcBegin, int srcEnd, char dst, int dstBegin) {//0,len=5,value=,count=5

if (srcBegin 《 0) {

throw new StringIndexOutOfBoundsException(srcBegin);

}

if (srcEnd 》 value.length) {

throw new StringIndexOutOfBoundsException(srcEnd);

}

if (srcBegin 》 srcEnd) {

throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);

}

System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);

}

5、最终调用的是System.arraycopy的方法:

public static void arraycopy(Object src,

int srcPos,

Object dest,

int destPos,

int length)

/*src - 源数组。

srcPos - 源数组中的起始位置。

dest - 目标数组。

destPos - 目的地数据中的起始位置。

length - 要复制的数组元素的数量。 

*/

System.arraycopy(, 5, 5);

将指定源数组中的数组从指定位置复制到目标数组的指定位置。

参考资料:百度百科-append

StringBuilder的append方法和String+String的区别

StringBuilder和StringBuffer,字符串是存放在char中的,char是存放在堆中的。相比String每次+都重新创建一个String对象,重新开辟一段内存不同,StringBuilder和StringBuffer的append都是直接把String对象中的char的字符直接拷贝到StringBuilder和StringBuffer的char上,效率比String的+高得多。当然,当StringBuilder和StringBuffer的char长度不够时,也会重新开辟一段内存。另外,StringBuffer是线程安全的,StringBuilder不是线程安全的。

stringbuffer的append方法返回类型是什么

append方法的返回类型是StringBuffer,返回的就是调用append方法的当前对象。

下面是一个小例子:

public class Test

{

public static void main (String args)

{

StringBuffer sb=new StringBuffer();

sb.append(“aaa“).append(“bbb“);

System.out.println(sb);

}

}

运行结果如下图:

StringBuffer类 的append方法 怎么添加字符串

  StringBuffer类 的append方法添加字符串的方法:  第一种,代码如下  StringBuffer sb=new StringBuffer();sb.append(“《?xml version=\“1.0\“ encoding=\“UTF-8\“?》“);  第二种,代码如下  sb.append(“《?xml version=’1.0’ encoding=’UTF-8’?》“);

stringbuffer append方法(java语言:String类的concat方法与StringBuffer类的append方法区别内存状态)

本文编辑:admin

更多文章:


richer(rich的比较级是richer还是more rich)

richer(rich的比较级是richer还是more rich)

本文目录rich的比较级是richer还是more richricher的中文意思rich是什么意思richer是什么意思rich的比较级是richer还是more rich比较级: richer。一、释义rich 英     adj. 富

2025年3月15日 18:30

python教程零基础入门最新(Python入门视频教程)

python教程零基础入门最新(Python入门视频教程)

本文目录Python入门视频教程python入门教程(非常详细)Python入门视频教程 lets python视频教程免费下载链接:https://pan.baidu.com/s/1YYn_vepCtq3CcKBD-vfnuw提取码:dx

2025年3月15日 01:50

square翻译(square和plaza都可以代表广场,他们有什么不同)

square翻译(square和plaza都可以代表广场,他们有什么不同)

本文目录square和plaza都可以代表广场,他们有什么不同square中文是什么意思Be there or be square里的square是什么意思广场的英语怎么说be there or be square里面的square指啥英语

2025年2月21日 17:40

负载均衡设备(华为网络设备配置,如何通过ospf实现负载均衡)

负载均衡设备(华为网络设备配置,如何通过ospf实现负载均衡)

本文目录华为网络设备配置,如何通过ospf实现负载均衡如何通过路由器的网络负载均衡功能、对局域网内的设备进行带宽限速华为网络设备配置,如何通过ospf实现负载均衡从三方面回答这个问题:OSPF负载均衡的说明、IPv4中OSPFv2负载均衡的

2025年3月17日 20:20

边框图片可爱(谁有漂亮的大头贴图框与动态边框或可爱边框)

边框图片可爱(谁有漂亮的大头贴图框与动态边框或可爱边框)

本文目录谁有漂亮的大头贴图框与动态边框或可爱边框如何画出可爱边框电子手抄报的花纹以及边框 图片128X128的可爱图片如何将可爱的卡通图案做成边框谁有漂亮的大头贴图框与动态边框或可爱边框你去天空软件站搜索“大头贴”看看,多下几款软件,看看有

2025年3月22日 03:20

saas是什么意思?saas平台是什么

saas是什么意思?saas平台是什么

本文目录saas是什么意思saas平台是什么SaaS是什么saas是什么什么是saas模式saas模式什么意思paas saas iaas 区别是云计算三大服务模式:IaaS/PaaS/SaaSsaas是什么意思SaaS,是Software

2025年3月4日 13:30

易语言源码免费(求几个易语言源码 懂得来)

易语言源码免费(求几个易语言源码 懂得来)

本文目录求几个易语言源码 懂得来易语言 源码易语言源码怎么生成EXE文件易语言源码工具箱源码求几个易语言源码 懂得来.版本2.子程序_按钮1_被单击时钟1.时钟周期=100.子程序_时钟1_周期事件.如果(进度条1.位置=100) 载入(窗

2025年3月26日 02:10

二进制10110001转十进制(二进制1011011怎么转化十进制)

二进制10110001转十进制(二进制1011011怎么转化十进制)

本文目录二进制1011011怎么转化十进制1011001转换成10进制如何转变方法是什么求教啊将二进制数11100101转换成十进制、八进制、十六进制二进制和十进制转换怎么算二进制数10110001相对应的十进制数应是二进制1011转换成十

2025年3月1日 06:10

java swing包(java的Swing是轻量级组件,轻量级组件是什么意思)

java swing包(java的Swing是轻量级组件,轻量级组件是什么意思)

本文目录java的Swing是轻量级组件,轻量级组件是什么意思刚学java,对于javax.swing包中的swing,不知道他是什么,我就知道是使用它设计图形Java编程中,Swing包中的组件处理事件时,下面()是正确的(选择一项)ja

2025年2月27日 09:20

h5移动端ui框架(有哪些适用于H5移动端开发的UI框架)

h5移动端ui框架(有哪些适用于H5移动端开发的UI框架)

本文目录有哪些适用于H5移动端开发的UI框架html5开发移动端要用什么框架比较好比较常用,成熟的针对html5的UI框架是哪些html5 移动开源框架有哪些移动webapp前端ui用哪个框架好使用html5开发移动端应用采用什么框架ui框

2025年2月22日 08:00

artificial怎么读(人工智能的英文全写怎么读)

artificial怎么读(人工智能的英文全写怎么读)

本文目录人工智能的英文全写怎么读artificial intelligence怎么读artificial是什么意思人工智能的英文全写怎么读artificial intelligence其中:1.artificial 英artifici

2025年3月26日 15:50

porter官网(I DO官网背景音乐是什么歌名呢)

porter官网(I DO官网背景音乐是什么歌名呢)

本文目录I DO官网背景音乐是什么歌名呢ido钻戒官网背景音乐浏览哪些网站可以帮助自己学会搭配衣服,提升自己品味porter international 是个什么牌子I DO官网背景音乐是什么歌名呢歌曲:I do 歌手:菅野洋子 多年前,I

2025年2月16日 10:10

persistence和perseverance的区别(近义词辨析 perseverance 和 persistence)

persistence和perseverance的区别(近义词辨析 perseverance 和 persistence)

本文目录近义词辨析 perseverance 和 persistenceperseverence和 persist的区别近义词辨析 perseverance 和 persistenceperseverance 意思是“毅力, 忍耐, 不屈不

2025年3月24日 21:30

presidential的意思(president和presidency有什么区别)

presidential的意思(president和presidency有什么区别)

本文目录president和presidency有什么区别presidential什么意思presidential campaign是什么意思president和presidency有什么区别前者指的是总统,一般都是直接指总统本人;后者指的

2025年3月9日 13:50

棋牌源码搭建(棋牌app有了源码以后怎么破解)

棋牌源码搭建(棋牌app有了源码以后怎么破解)

本文目录棋牌app有了源码以后怎么破解那位大侠 能帮我下咯 “网狐棋牌.WEB.源码.机器人.视频教程” 我在架设这个是遇到啦麻烦 那位指教下棋牌游戏开发制作到底需要花费多少资金,有没有好的开发公司介绍棋牌源码要学什么专业如何搭建一个成功的

2025年3月21日 12:30

腾讯云数据库(腾讯云买了云服务器还用买数据库吗)

腾讯云数据库(腾讯云买了云服务器还用买数据库吗)

本文目录腾讯云买了云服务器还用买数据库吗腾讯云数据库产品/腾讯云数据库价格/腾讯云数据库怎么使用腾讯云数据库如何修改时区腾讯云数据库后台开发工程师待遇各路大佬,腾讯云的对象存储和云数据库有什么区别腾讯qq用什么样的数据库请问下购买腾讯云服务

2025年2月8日 22:30

脚本语言排行(编程语言排行榜是怎样的)

脚本语言排行(编程语言排行榜是怎样的)

本文目录编程语言排行榜是怎样的现在最主流的编程语言和脚本语言有哪些脚本语言有哪些脚本语言_脚本语言排行_最强脚本语言是那个语言编程语言排行榜是怎样的2019年排行:Java,C,python,C++,C#,PHP。1、JavaJava是一门

2025年3月23日 20:10

pointer是什么牌子(衣服标志是狗的是什么牌子)

pointer是什么牌子(衣服标志是狗的是什么牌子)

本文目录衣服标志是狗的是什么牌子一个小狗的商标是什么牌子有个牌子是狗上面有皇冠,这个是什么牌子有点像长颈鹿的标志是什么牌子是报喜鸟旗下的Point S是个什么样的品牌point的服饰品牌point衣服的商标是个狗,这个牌子的衣服叫什么名字啊

2025年3月13日 14:10

w3cschool破解版(学习编程技术为什么都推荐W3Cschool.cn)

w3cschool破解版(学习编程技术为什么都推荐W3Cschool.cn)

本文目录学习编程技术为什么都推荐W3Cschool.cnw3cschool的更新升级学习编程技术为什么都推荐W3Cschool.cn慢慢来,学计算机编程,首先英语数学要好,里面都是英文,如果不会英文也有中文版的,但是从长远看,学好英语对你以

2025年2月23日 10:50

ehviewer官网下载(ehviewer导入已下载)

ehviewer官网下载(ehviewer导入已下载)

本文目录ehviewer导入已下载ehviewer怎么退出阅览ehviewer如何下载原图ehviewer有没有病毒ehviewer下载太慢ehviewer怎么把图片下载到相册ehviewer下载配额多久恢复ehviewer是什么ehvie

2025年4月2日 03:20

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索