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

:暂无数据 2026-07-17 10:40:02 :0

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

本篇文章给大家谈谈stringbuffer append方法,以及java中,定义一个StringBuffer空构造,为什么能通过append添加超过16个字符对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

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

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

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

ensureCapacityInternal(int minimumCapacity)

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

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语言: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 就会开始工作,对速度的影响一定是相当大的。

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“ 和 String的“+“用来连接字符串哪个好些

String一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。

而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。

因此我们得出结论:当需要进行频繁修改字符串的操作时先建立StringBuffer类对象进行操作,将最后结果转化成String类对象返回,这样效率会高很多。

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方法(java中,定义一个StringBuffer空构造,为什么能通过append添加超过16个字符)

本文编辑:admin

本文相关文章:


accumulate怎么记忆(通过实例教我如何记单词)

accumulate怎么记忆(通过实例教我如何记单词)

“accumulate怎么记忆”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看accumulate怎么记忆(通过实例教我如何记单词)!

2026年9月20日 08:10

assert函数php(如何通过非数字与字符的方式实现PHP WebShell详解)

assert函数php(如何通过非数字与字符的方式实现PHP WebShell详解)

各位老铁们,大家好,今天由我来为大家分享assert函数php,以及如何通过非数字与字符的方式实现PHP WebShell详解的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈

2026年9月6日 10:20

java mapreduce(如何通过Java程序提交yarn的MapReduce计算任务)

java mapreduce(如何通过Java程序提交yarn的MapReduce计算任务)

“java mapreduce”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看java mapreduce(如何通过Java程序提交yarn的MapReduce计算任务)!

2026年8月27日 22:50

更多文章:


协方差计算公式(协方差的计算公式)

协方差计算公式(协方差的计算公式)

这篇文章给大家聊聊关于协方差计算公式,以及协方差的计算公式对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 08:10

易语言网页api接口怎么调用(易语言,怎么读取网页json的api)

易语言网页api接口怎么调用(易语言,怎么读取网页json的api)

本篇文章给大家谈谈易语言网页api接口怎么调用,以及易语言,怎么读取网页json的api对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 08:00

majority of(the majority of 和 a majority of的区别以及用法例句)

majority of(the majority of 和 a majority of的区别以及用法例句)

这篇文章给大家聊聊关于majority of,以及the majority of 和 a majority of的区别以及用法例句对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 07:40

汉字机内码查询表(1个汉字的机内码是几位谢谢)

汉字机内码查询表(1个汉字的机内码是几位谢谢)

大家好,关于汉字机内码查询表很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于1个汉字的机内码是几位谢谢的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 07:20

promote翻译(英语翻译倡导怎么说)

promote翻译(英语翻译倡导怎么说)

其实promote翻译的问题并不复杂,但是又很多的朋友都不太了解英语翻译倡导怎么说,因此呢,今天小编就来为大家分享promote翻译的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 06:30

用手机如何导航?开车用手机导航哪个软件最好

用手机如何导航?开车用手机导航哪个软件最好

今天给各位分享用手机如何导航的知识,其中也会对用手机如何导航进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 06:20

多线程技术有什么用(多线程有什么作用)

多线程技术有什么用(多线程有什么作用)

其实多线程技术有什么用的问题并不复杂,但是又很多的朋友都不太了解多线程有什么作用,因此呢,今天小编就来为大家分享多线程技术有什么用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 05:40

another time(another time和other time的区别)

another time(another time和other time的区别)

大家好,another time相信很多的网友都不是很明白,包括another time和other time的区别也是一样,不过没有关系,接下来就来为大家分享关于another time和another time和other time的区

2026年10月11日 05:00

java开发工具包jdk(JDK是什么意思)

java开发工具包jdk(JDK是什么意思)

其实java开发工具包jdk的问题并不复杂,但是又很多的朋友都不太了解JDK是什么意思,因此呢,今天小编就来为大家分享java开发工具包jdk的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 04:50

mysql 命令(MySQL的基本命令)

mysql 命令(MySQL的基本命令)

大家好,如果您还对mysql 命令不太了解,没有关系,今天就由本站为大家分享mysql 命令的知识,包括MySQL的基本命令的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 03:00

最近更新

majority of(the majority of 和 a majority of的区别以及用法例句)
2026-10-11 07:40:02 浏览:0
热门文章

标签列表