java---StringBuffer的应用以及跟String作为形式参数的区别

1, StringBuffer :翻译成 字符串缓冲区
1,特性
<1>:是线程安全的
<2>: 可变字符序列
<3>:StringBuffer 与String一样都实现了 接口 CharSequence
<4>:每个字符串缓冲区都有一定的容量,此容量会根据情况,自动的扩容。
2,本质:
StringBuffer 内部有一个char数组,默认初始值16;如果不够用了,
自动扩容规则: 数组的当前长度 *2 +2;
3,构造方法
public StringBuffer()
public StringBuffer(int capacity)
public StringBuffer(String str)
4,功能
<1>添加功能
public StringBuffer append(String str):按顺序附加
public StringBuffer insert(int offset,String str):插队
<2>删除功能
public StringBuffer deleteCharAt(int index)
public StringBuffer delete(int start,int end)
<3>替换功能
public StringBuffer replace(int start,int end,String str)
<4>反转功能
public StringBuffer reverse()
<5>截取功能
public String substring(int start)
public String substring(int start,int end)
截取功能和前面几个功能的不同
返回值类型是String类型,本身没有发生改变
++++++++StringBuffer的实例以及与String作为形式参数的区别++++++++++
public class StringBufferDemo {
public static void main(String[] args){
StringBuffer sb=new StringBuffer();
sb.append(“jerry”);
//length为5,表示真是存储的字符数量
System.out.println(sb.length());
//capacity 表示容量,内部数组的长度.初始值是16
System.out.println(sb.capacity());
System.out.println("");
//当我们使用字符串拼接的时候,字符串相加操作的时候,建议我们使用
//StringBuffer代替String
sb.append(“i”);
StringBuffer sb2=new StringBuffer();
StringBuffer sb3=new StringBuffer(2500);
//将String转化为StringBuffer
StringBuffer sb4=new StringBuffer(“jerry”);
System.out.println("
");
System.out.println(“sb:”+sb+sb.hashCode());
sb.insert(5,“william”);
System.out.println(“sb:”+sb+sb.hashCode());
System.out.println("
");
sb.deleteCharAt(5);
System.out.println(“sb:”+sb+sb.hashCode());
System.out.println("
");
sb.delete(5,10);
System.out.println(“sb:”+sb+sb.hashCode());
System.out.println("
==========================");
String subdtring=sb.substring(5);
System.out.println(“截取的子字符串:”+subdtring);
//由此看出,截取功能和前面几个功能不同,返回值类型为String类型,
// 本身没有发生改变
System.out.println(“sb:”+sb+sb.hashCode());

    System.out.println("=========String与StringBuffer作为形式参数传递的不同表现=======================");


    int i=10;
    String str1="jerry";
    String str2="susan";
    System.out.println(i);
    System.out.println("str1:"+str1+",str2:"+str2);
    change(str1,str2);
    System.out.println("str1:"+str1+",str2:"+str2);
    System.out.println("============================");
    StringBuffer sb5=new StringBuffer("hello");
    StringBuffer sb6=new StringBuffer("world");
    System.out.println("sb5:="+sb5+",sb6:"+sb6);
    System.out.println("sb5的哈希值:"+sb5.hashCode());
    System.out.println("sb6的哈希值:"+sb6.hashCode());
    change(sb5,sb6);
    System.out.println("sb5:="+sb5+",sb6:"+sb6);
    System.out.println("sb5的哈希值:"+sb5.hashCode());
    System.out.println("sb6的哈希值:"+sb6.hashCode());
}

/**
 * 测试string作为形式参数传递的问题
 * String是引用类型,但是是以一种特殊的引用类型,把Stringz作为形式参数传递的
 * 时候,我们把String看做是"基本数据类型"来处理
 * @param str1
 * @param str2
 */
private static void change(String str1,String str2){
    //改变形式参数的值
    str1=str2;
    str2=str1+str2;
}


/**
 * 测试StringBuffer作为形式参数传递的问题
 *
 */
private static void change(StringBuffer x,StringBuffer y){
    //在方法内,重新定义了两个变量StringBuffer x=sb1;StringBuffer y=sb2;
    //改变形式参数的值
    x=y;//把y应用的地址值赋值给x,跟sb1没有任何关系,也没有sb1原有对象的值
    /*
    * 此时,x,y,sb2,三个变量指向了同一块内存空间
    * sb1引用没有变,bs1所引用的内容也没有变化
    * */
    y.append(x);//此时将y应用所指的对象的具体内容改变了.(x,y指向的是同一对象)
    /*
    * y的引用没哟变,但是y的引用内容变了"susansusan"
    * 整个方法执行完成以后,x,y消失.但是sb1,sb2还在
    * sb1,sb2,x,y引用类型,作为形式参数传递的实际时地址值
    * */
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值