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 是一个线程安全的可变字符序列 ; 线程安全对应的效率低 ...
随机推荐
- Java运行时内存划分与垃圾回收--以及类加载机制基础
----JVM运行时内存划分----不同的区域存储的内容不同,职责因为不同1.方法区:被线程共享,存储被JVM加载的类的信息,常量,静态变量等2.运行时常量池:属于方法区的一部分,存放编译时期产生的字 ...
- jdbc链接hive报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport
写了个jdbc连接hive2的demo,结果报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport,实际 ...
- 别指望一文读懂Java并发之从一个线程开始
Understanding concurrent programming is on the same order of difficulty as understanding object-orie ...
- Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能
1 环境搭建 1.1 Python安装 1.2 MySQL环境搭建 1.3安装MySQLdb 2 具体实现 2.1 登陆界面 2.2 注册界面 2.3 具体实现部分代码 1 环境搭建 1.1 P ...
- 基于HTML5 Canvas的3D动态Chart图表
发现现在工业SCADA上或者电信网管方面用图表的特别多,虽然绝大部分人在图表制作方面用的是echarts,他确实好用,但是有些时候我们不能调用别的插件,这个时候就得自己写这些美丽的图表了,然而图表轻易 ...
- 暑假练习赛 007 E - Pairs
E - Pairs Description standard input/outputStatements In the secret book of ACM, it’s said: “Glory f ...
- 2016 ACM/ICPC Asia Regional Dalian Online Football Games
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 前端安全之CSRF攻击
前端安全之CSRF攻击 转载请注明出处:unclekeith: 前端安全之CSRF攻击 CSRF定义 CSRF,即(Cross-site request forgery), 中文名为跨站请求伪造.是一 ...
- SSH框架的多表查询和增删查改 (方法一)上
原创作品,允许转载,转载时请务必标明作者信息和声明本文章==> http://www.cnblogs.com/zhu520/p/7772823.html 因为最近在做Android 练习的 ...
- JavaScript变量存储浅析
var test=100; function foo(){ console.log(test);//undefined var test=200; console.log(test); } 我们明明定 ...