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的更多相关文章

  1. String StringBuilder以及StringBuffer

    例一:[看了威哥视频,下面更好理解] package sunjava; public class String_test { public static void main(String[] args ...

  2. String, StringBuilder 与StringBuffer的区别与联系

    1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBu ...

  3. Java中String, StringBuilder和StringBuffer

    Java中常用来处理字符串的类有三个: String, StringBuffer和StringBuilder. 区别 三者都继承自CharSequence接口, 首先说明三者间主要区别 String字 ...

  4. String,StringBuilder和StringBuffer的特点和使用场景

    这三个类是平时开发中经常遇到的,主要差别是运行速度和线程安全,使用起来String最方便了,另外两个稍微复杂一些. 从运行速度角度看,StringBuilder>StringBuffer> ...

  5. java String,StringBuilder和StringBuffer

    String:1.java语言中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但java一般使用Sting类作为字符串的标准格式,java编译器把字符串值作为String对象. ...

  6. String,StringBuilder与StringBuffer的区别

    相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...

  7. Java基础学习总结(65)——Java中的String,StringBuilder和StringBuffer比较

    字符串,就是一系列字符的集合. Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串,其中StringBuilder类是到jdk 1.5才新增的.字符 ...

  8. String,StringBuilder和StringBuffer

    String 字符串常量,由String创建的字符内容,长度是不可改变,存放字符的数组被声明为final. 实际上String类操作字符串是通过建立一个StringBuffer,然后调用append( ...

  9. java 常用类库:String ; StringBuilder和StringBuffer类

    1. String 1.String对象是不可变的 String类的value属性是用来存放字符串里面的值的.这个属性是被final修饰的.final修饰的变量不能够被第二次赋值,所以字符串是不可变的 ...

  10. String,StringBuilder 和StringBuffer区别

    1. String 和字符串缓冲区的区别是: String 是一个不可变的字符序列 , 而字符串缓冲区是可变的 2. StringBuffer 是一个线程安全的可变字符序列 ; 线程安全对应的效率低 ...

随机推荐

  1. Java运行时内存划分与垃圾回收--以及类加载机制基础

    ----JVM运行时内存划分----不同的区域存储的内容不同,职责因为不同1.方法区:被线程共享,存储被JVM加载的类的信息,常量,静态变量等2.运行时常量池:属于方法区的一部分,存放编译时期产生的字 ...

  2. jdbc链接hive报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport

    写了个jdbc连接hive2的demo,结果报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport,实际 ...

  3. 别指望一文读懂Java并发之从一个线程开始

    Understanding concurrent programming is on the same order of difficulty as understanding object-orie ...

  4. 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 ...

  5. 基于HTML5 Canvas的3D动态Chart图表

    发现现在工业SCADA上或者电信网管方面用图表的特别多,虽然绝大部分人在图表制作方面用的是echarts,他确实好用,但是有些时候我们不能调用别的插件,这个时候就得自己写这些美丽的图表了,然而图表轻易 ...

  6. 暑假练习赛 007 E - Pairs

    E - Pairs Description standard input/outputStatements In the secret book of ACM, it’s said: “Glory f ...

  7. 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 ...

  8. 前端安全之CSRF攻击

    前端安全之CSRF攻击 转载请注明出处:unclekeith: 前端安全之CSRF攻击 CSRF定义 CSRF,即(Cross-site request forgery), 中文名为跨站请求伪造.是一 ...

  9. SSH框架的多表查询和增删查改 (方法一)上

    原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>  http://www.cnblogs.com/zhu520/p/7772823.html   因为最近在做Android 练习的 ...

  10. JavaScript变量存储浅析

    var test=100; function foo(){ console.log(test);//undefined var test=200; console.log(test); } 我们明明定 ...