StringBuffer、StringBuider、String类之间的关系

1、String类有哪些特点?

字符串常量就是String类的匿名对象,一旦字符串定义则不可改变。

String类对象可以使用直接赋值或者是构造方法实例化,前者可以自动入池,又不产生垃圾空间。

在实际的开发之中,肯定都要求使用到String类,可是String类有一个天生的短板,不可改变。如果需要经常修改的环境下只能够使用StringBuffer类。

在String类中可以使用“+”来实现字符串的连接操作,而在StringBuffer类中可以使用append()方法实现“+”的功能,此方法定义如下:

public StringBuffer append(数据类型 变量)

 

范例:

package com.lohas.demo.StringBufferBuilderDemo;

public class StringBufferDemo {

   public static voidmain(String[] args) {

        StringBufferstringBuffer = new StringBuffer();

       stringBuffer.append("Hello ").append("World !");// 连接字符串

        fun(stringBuffer);//修改字符串的内容

        System.out.println(stringBuffer);

    }

    public static voidfun(StringBuffer stringBuffer){//引用传递

       stringBuffer.append("\n Hi,Lohas");

    }

}

 

此时的执行结果之中发现字符串的内容已经得到了改变,所以StringBuffer适合于修改,而String不适合于修改。

原则:在开发之中95%的情况下使用的都应该是String(String只是不适合于频繁修改),所以不可能通过循环操作String,但是如果真的是进行连接操作,还是建议使用“+”。如果真的是循环修改,肯定使用StringBuffer

现在字符串类有两个类:StringStringBuffer,那么这两个有什么关系?打开文档观察结构:

String

StringBuffer

public final class String
extends Object
implements Serializable, Comparable<String>, CharSequence

 

public final class StringBuffer
extends Object
implements Serializable, CharSequence

 

发现StringStringBuffer类都是CharSequence接口的子类,所以在日后一定要记住,StringStringBuffer都可以向上转型为CharSequence接口实例化。

 

 


但是现在出现了一个问题,String与StringBuffer类的对象该如何互相转换呢?对于这两个类对象的互相转换,就可以利用以下原则完成:

1、String转换为StringBuffer

这种转换有两种操作途径:

利用StringBuffer类的构造方法:public StringBuffer(String str)
StringBuffer类存在有append()方法:     public StringBuffer append(String str)
2、StringBuffer转换为String
    所以类都存在有toString()方法,利用此方法可以将StringBuffer内容变为String内容。
    利用“+”实现所有数据类型向String的转换。
虽然在开发之中,要进行字符串的操作都是以String类为主,可是你永远不要忽略一点为,StringBuffer有一些好的操作方法,方便用户开发代码。
        在指定位置追加新的内容,方法:
               public StringBuffer insert(int offset, 数据类型d)
        反转,方法:public StringBuffer reverse()
        删除指定范围的数据,方法:
               public StringBuffer delete(int start,int end)
        以上的三个操作方法是掌握StringBuffer类的主要操作。
StringBuffer类是在JDK1.0的时候提供的,而在JDK1.5之后又提供有一个StringBuilderStringBuffer属于线程安全的操作,
但是性能不高,而StringBuilder属于非线程安全的操作,性能高。
 
StringBuffer
StringBuilder
JDK
1.0
1.5
方法
synchronized
线程
线程安全
非线程安全
 
请解释StringStringBufferStringBuilder类的区别
        String类的内容一旦声明则不可改变,而StringBufferStringBuilder的内容可以改变。
        StringStringBufferStringBuilder都是CharSequence接口的子类。
        StringBuffer是从JDK1.0时提供的,属于线程安全的操作,性能不高,而StringBuilder是从JDK1.5时提供的,属于非线程安全操作,性能更高。
        (一般来说,新类的提供的功能和旧类的功能一样,会把旧的类设置成线程安全的)
        字符串的操作首选的一定是String类,可改变的时候再选择StringBufferStringBuilder,多个线程访问同一资源时,必须使用StringBuffer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值