String、StringBuilder和StringBuffer
1、string不可变性
java的docs有这样一句话:Strings are constant; their values cannot be changed after they are created。
对Java的String类而言,核心的一个域就是一个char数组,内部就是通过维护一个不可变的char数组,来向外部输出的。比如进行进行字符的提取、子字符串的提取等等。
1 public static void main(String[] args){ 2 String a="hello"; 3 print a; 4 Sting b =a.toUpperCase(); 5 print b; 6 print a; 7 }
上面这段代码的输出结果分别是hello,HELLO,hello。说明了String的不可变性。事实上,在String进行参数传递的时候,都是复制引用传递,而String对象一直在某个物理地址,没有发生任何变化。指向这个Sring对象的任何引用都无法改变它的值。
2、StringBuilder和StringBuffer的使用
String具有不可变性,在我们需要可变String的时候,可能会带来效率问题。比如我现在需要向String对象后面加多个“0”,那么每加一个“0”都会产生一个中间对象。因此具有可变性的StringBuilder就有了用武之地。
StringBuilder str = new StringBuilder();//空 StringBuilder str = new StringBuilder("start")//str初始化为“start”
StringBulider提供了很多有用的方法,比如append和insert。假设存在StringBulider对象 str=“start”,str.append(on),那么str=“starton”,str.insert(4,"on"),那么str=“staront”。一般而言,对于字符串str,str.append(x)和str.insert(str.length(),x)是等价的。
StringBuffer和StringBuIlder的功能基本相同。一般使用StringBuIlder,因为StringBuIlder速度更快。但是,需要注意的是 stringBuilder在多线程中是不安全的。一般在多线程中使用StringBuffer。
3.如何调用函数实现两个string字符串的交换
最近在编程时需要对string字符串进行交换
private switchString(String str1,String str2){ String temp = str1; str1 = str2; str2 = str1; }
main(){
str1="123";
str2="1234";
switchString(str1,str2);
print str1,str2;
}
如果按上述方式写输出为"123"和“1234”,二者没发生交换。如果是在C++中,我们可以采用引用传递或者地址传递的方法进行交换。但是在java中函数调用时,传递的是形参,改变的也是形参,实参不发生变化(java的基本数据类型按值传递,可以说值传递后就是没有关系的两个变量了)。
如果想要进行交换或者说只是得到交换后的两个值,可以直接在main()进行交换,或者在switchString函数返回交换后的str1和str2(java函数只能return一个值,可以把交换后的两个str放在一个arraylist中return)。
String、StringBuilder和StringBuffer的更多相关文章
- String StringBuilder以及StringBuffer
例一:[看了威哥视频,下面更好理解] package sunjava; public class String_test { public static void main(String[] args ...
- String, StringBuilder 与StringBuffer的区别与联系
1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBu ...
- Java中String, StringBuilder和StringBuffer
Java中常用来处理字符串的类有三个: String, StringBuffer和StringBuilder. 区别 三者都继承自CharSequence接口, 首先说明三者间主要区别 String字 ...
- String,StringBuilder和StringBuffer的特点和使用场景
这三个类是平时开发中经常遇到的,主要差别是运行速度和线程安全,使用起来String最方便了,另外两个稍微复杂一些. 从运行速度角度看,StringBuilder>StringBuffer> ...
- java String,StringBuilder和StringBuffer
String:1.java语言中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但java一般使用Sting类作为字符串的标准格式,java编译器把字符串值作为String对象. ...
- String,StringBuilder与StringBuffer的区别
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- Java基础学习总结(65)——Java中的String,StringBuilder和StringBuffer比较
字符串,就是一系列字符的集合. Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串,其中StringBuilder类是到jdk 1.5才新增的.字符 ...
- String,StringBuilder和StringBuffer
String 字符串常量,由String创建的字符内容,长度是不可改变,存放字符的数组被声明为final. 实际上String类操作字符串是通过建立一个StringBuffer,然后调用append( ...
- java 常用类库:String ; StringBuilder和StringBuffer类
1. String 1.String对象是不可变的 String类的value属性是用来存放字符串里面的值的.这个属性是被final修饰的.final修饰的变量不能够被第二次赋值,所以字符串是不可变的 ...
- String,StringBuilder 和StringBuffer区别
1. String 和字符串缓冲区的区别是: String 是一个不可变的字符序列 , 而字符串缓冲区是可变的 2. StringBuffer 是一个线程安全的可变字符序列 ; 线程安全对应的效率低 ...
随机推荐
- ES6中函数新增的方式方法
---恢复内容开始--- 绪 言 ES6 大家对JavaScript中的函数都不陌生.今天我就为大家带来ES6中关于函数的一些扩展方式和方法. 1.1函数形参的默认值 1.1.1基本用法 ES6 ...
- RQPro 公募FOF策略实例——晨星基金筛选和风险平价配置
2017年9月8日,证监会公布首批公募FOF基金名单,标志着公募FOF产品正式落地.FOF(Fund of Funds)是一种通过投资基金,而非直接投资具体证券标的(股票或债券等)来实现分散化资产配置 ...
- [译]ASP.NET Core 2.0 路由引擎之网址生成
问题 如何在ASP.NET Core 2.0中由路由引擎来生成网址? 答案 新建一个空项目,修改Startup.cs文件,添加MVC服务和中间件: public void ConfigureServi ...
- angular指令之complie和link不得不说的故事
angular指令比较晦涩难懂的就是complie和link字段了,什么时候该用complie?什么时候该用link?总是很难分别清楚.当理解了指令的真正编译原理的时候,就会发现这相当的简单. ng怎 ...
- WindowsAll下安装与破解IntelliJ IDEA2017
IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具( ...
- C++有符号和无符号数的转换
本文转自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题 ...
- Codeforces Round #383 (Div. 2)C. Arpa's loud Owf and Mehrdad's evil plan
C. Arpa's loud Owf and Mehrdad's evil plan time limit per test 1 second memory limit per test 256 me ...
- 跨域请求CORS
参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS http://www.ruanyifeng.com/b ...
- 使用weinre远程调试
1.调试环境: 1)使用nodejs搭建调试服务器: 先安装node,然后使用npm安装weinre,在node.js安装目录输入以下命令 npm install weinre 2)需要wifi环境和 ...
- CSS fliter
Filters主要是运用在图片上,以实现一些特效.(也能运用于video上),类似滤镜效果 img { -webkit-filter:grayscale(1); } gr ...