《黑马程序员》java笔记->StringBuffer概述及StringBuilder和数组的区别

本文详细介绍了Java中StringBuffer和StringBuilder类的特点与区别,包括它们的线程安全性、使用场景及内部实现机制,并通过示例代码展示了如何使用这两个类。

------- android培训java培训、期待与您交流! ----------


public class StringBufferDemo {



/**
* @param args
*/
public static void main(String[] args) {


/*
* 字符串缓冲区。StringBuffer:
* 特点:
* 1,缓冲区就是用来缓存数据,意味着它是一个容器。
* 2,该容器的长度是可变的。 
* 3,提供了对容器中内容的操作的方法(最多无外乎四种:增删改查.)
* 4,该缓冲区中可以添加多种类型的元素,基本类型和引用类型。 
* 5,无论怎么样的改变容器中的数据,最终要使用结果,还是必须要将其转成字符串,使用toString方法。

* append():追加:在结尾处添加。
*/


//创建一个字符串缓冲区。
StringBuffer sb = new StringBuffer("abcd");

//使用其添加方法,往缓冲区中加入元素。 
// StringBuffer s1 = sb.append(45);
// System.out.println(sb==s1);//true,append返回的还是原来的缓冲区。

// sb.append(45).append(true).append("abc");//连续添加,调用动作:方法调用链。
// System.out.println(sb.toString());

// String str = "abc"+4+'c';
// str = new StringBuffer().append("abc").append(4).append('c').toString();

//想要在任意位置添加怎么呢? insert方法。

// sb.insert(1, true);
// System.out.println(sb);


//删除内容。 
// sb.delete(0,sb.length());//清空缓冲区。
// System.out.println(sb);//""

//修改一段。
// sb.replace(1, 3, "ak47");
// System.out.println(sb);
System.out.println(sb.reverse());
}


}

---------------------------------------------------------------------------------------------------------------------------------------------------

/*
* StringBuilder含义:
* jdk1.5版本出现了一个新的字符串缓冲区。
* 功能和stringBuffer一模一样。

* 到底区别呢?
* StringBuffer是线程安全的。
* StringBuilder是线程不安全的。为了提高效率。 因为不用判断同步锁。


* 对于容器而已,被多线程操作,容器出现安全问题。因为
* 一个线程负责添加,一个线程负责删除,因为线程的随机性就会出现安全问题。

* 加锁,一个线程在执行容器中的内容时,其他线程不可以执行。 
* 所以凡是可以操作容器数据的方法,都需要明确这个锁。
* 每调用一次操作容器的方法(添加,删除,)都需要判断这个锁。
* 对于多线程而言,安全了,但是效率低。
* 对已单线程而言,不涉及安全,但是效率低。所以,对于线程提供了StringBuilder。不需要同步的缓冲区。 

* 实际开发时,建议使用StringBuilder,只有在多线程时,才使用StringBuffer。

* 升级:
* 1,简化书写。
* 2,提高效率。
* 3,提高安全性。 

*/

/*
* StringBuffer和数组容器的区别?

* 1,
* 数组容器是固定长度的。
* StringBuffer是可变长度的。
* 2,
* 数组容器一旦初始化就明确了元素的类型。
* StringBuffer可以存储任意类型。包括基本和引用。
* 3,
* 数组存储完元素可以对元素进行操作(通过角标)。
* StringBuffer存储完元素后,都会变成字符串,只能用字符串的方法来操作。
*  
* int[] arr = {56,78,23,19};
* sop(arr[2])//23;

* StringBuffer sb = new StringBuffer();
* sb.apppend(56);
* sb.apppend(78);
* sb.apppend(23);
* sb.apppend(19);
* sb.apppend(true);

* "56782319true"
* 什么时候用StringBuffer或者StringBuilder?
* 数据个数可以是固定的,可是是不固定的,数据类型也可以是固定的,或者不固定的。
* 只要最终这些数据都需要变成字符串来操作时,就可以使用字符串缓冲区。

*/




}

内容概要:本文围绕“新能源发电接入弱电网的宽频带振荡机理及抑制方法”开展深入研究,结合Matlab编程与Simulink仿真平台,系统剖析新能源发电系统在弱电网条件下引发的宽频带振荡问题。研究聚焦于变流器控制动态、锁相环(PLL)频率耦合效应、序阻抗建模及其交互特性等关键因素,揭示振荡产生的内在机理。通过构建精确的数学模型与电磁暂态仿真模型,采用扫频分析法获取系统序阻抗特性,并结合奈奎斯特稳定性判据进行判别,验证理论分析的正确性。同时,提出针对性的抑制策略,如改进控制算法、引入阻尼补偿环节或优化控制器参数设计,以提升系统在弱电网环境下的稳定性。整个研究流程完整复现了博士论文级别的科研工作,具有较强的理论深度与工程应用价值。; 适合人群:适用于具备电力系统、电力电子或自动控制等相关专业背景,熟悉Matlab/Simulink仿真工具,正在从事新能源并网、电力系统稳定性分析、变流器控制策略研究的研究生、科研人员及电力行业工程技术开发者。; 使用场景及目标:①深入理解新能源并网系统在弱电网中发生宽频带振荡的物理本质与动态演化过程;②掌握基于频域阻抗法的系统稳定性建模与分析方法;③学习并复现高水平学术论文中的关键技术路线,提升独立科研能力与仿真建模水平;④为实际工程中新能源电站的并网稳定性问题提供理论依据与可行的抑制方案参考。; 阅读建议:建议读者结合文中提供的Matlab代码与Simulink仿真模型,逐步完成从阻抗建模、扫频仿真到稳定性判据应用的全过程实践,重点关注锁相环与电流环之间的动态耦合关系,并辅以相关文献深化对频域分析理论的理解,实现理论与仿真的深度融合。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值