栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础类库——StringBuffer、String、StringBuilder类(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础类库——StringBuffer、String、StringBuilder类(一)

StringBuffer、String、StringBuilder类

1.1 String 类那些特点
(1)字符串常量就是String类的匿名对象,一旦字符串定义则不可改变;
(2)String类对象可以直接赋值或者构造方法实例化,前者可以自动入池,又不产生垃圾空间;
在实际的开发之中,肯定都要求使用到String类,可是String有一个天生的短板:不可改变,所以如果要想面对经常修改的环境下只能使用Stringbuffer类。

在String类中可以使用“+”来实现连接操作,而在StringBuffer中可以使用append()方法实现“+”的功能,次方法发定义如下:public StringBuffer append(数据类型 变量)

范例:利用StringBuffer修改字符串

package day2;

public class TestDemo {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("旺财").append("是一条狗");//连接字符串
        fun(buffer);//修改字符串内容
        System.out.println(buffer);
    }
    public static void fun(StringBuffer temp){//引用传递
        temp.append("n旺旺旺!!!");
    }
}
旺财是一条狗
旺旺旺!!!

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

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

String、StringBuffer 两个类有什么关系?
通过观察两个类的继承结构:
String:public final class String extends Object implements Serializable, Comparable,CharSequence

StringBuffer:public final class StringBuffer extends Object
implements Serializable, CharSequence
发现String和StringBuffer类都是CharSequence接口的子类;所以String和StringBuffer都可以向上转型为CharSequence接口实例化。

package day2;

public class TestDemo {
    public static void main(String[] args) {
        
        StringBuffer buffer = new StringBuffer();
        buffer.append("旺财").append("是一条狗,你不要过来呀。》老树开花从年度计划的建设进度");//连接字符串
        CharSequence charSequenceBuffer = buffer;
        fun(buffer);//修改字符串内容
        System.out.println(buffer);
        System.out.println(charSequenceBuffer.length());
        System.out.println(charSequenceBuffer.subSequence(5,19));

        
        String str = "此时"+"的执行结果之中发现"+"字符串的内容已经得到了改变";
        CharSequence charSequenceStr = str;
        System.out.println(str);
        System.out.println(charSequenceStr.length());
        System.out.println(charSequenceStr.subSequence(5,12));
    }
    public static void fun(StringBuffer temp){//引用传递
        temp.append("n旺旺旺!!!");
    }
}

旺财是一条狗,你不要过来呀。》老树开花从年度计划的建设进度
旺旺旺!!!
36
狗,你不要过来呀。》老树开花
此时的执行结果之中发现字符串的内容已经得到了改变
24
结果之中发现字

String与StringBuffer类的对象相互转换
String转StringBuffer:
(1)利用StringBuffer类的构造方法:public StringBuffer(String str)

String str = "此时"+"的执行结果之中发现"+"字符串的内容已经得到了改变";
	StringBuffer s = new StringBuffer(str);
	System.out.println(s);

(2)StringBuffer存在append()方法,public StringBuffer append(String str)

String str = "此时"+"的执行结果之中发现"+"字符串的内容已经得到了改变";
	StringBuffer s = new StringBuffer();
	System.out.println(s.append(str));

StringBuffer转String
(1)所有类都存在toString()方法,利用此方法可以将StringBuffer内容转成String内容

	StringBuffer buffer = new StringBuffer();
	buffer.append("旺财").append("是一条狗!");//连接字符串
	System.out.println(buffer.toString());

(2)利用“+”实现所有数据类型想String的转换。

StringBuffer buffer = new StringBuffer("旺财");
	String s = "" + buffer;
	System.out.println(s);

虽然在开发中,要进行字符串的操作都是以String类为主,可是你永远不要忽略一点:StringBUffer类也提供了一下好的操作方法,方便用户开发代码。

范例1:在指定位置追加新的内容
方法:public StringBuffer insert(int offset,数据类型 变量)

public class TestDemo {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("旺财");
        buffer.insert(0,"你好").insert(1,"特么");
        System.out.println(buffer);
    }
}
你特么好旺财

范例2:反转
方法:public StringBuffer reverse()

package day2;

public class TestDemo {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("Hello");
        System.out.println(buffer.reverse());
    }
}
olleH

范例3:删除指定范围内数据
方法:public StringBuffer delete(int start,int end)

package day2;

public class TestDemo {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("Hello");
        System.out.println(buffer.delete(0,3));
    }
}
lo

注:以上的三个操作方法是掌握StringBuffer类的主要操作。

StringBuffer类是在JDK1.0的时候提供的,而JDK1.5之后又提供有一个StringBuilder类,这两个类单看文档都是一个德行。StringBuffer属于线程安全的操作,但是性能不高,而StringBuilder属于非线程安全的操作,性能高。

面试题:请解释String、Stringbuffer、StringBuilder类的区别
(1)String、Stringbuffer、StringBuilder类都是CharSequence接口的子类;
(2)String类的内容一旦声明则不可改变,而StringBuilder、StringBuilder的内容可以改变;
(3)StringBuffer类是在JDK1.0的时候提供的,属于线程安全的操作,但是性能不高,而StringBuilder是JDK1.5之后提供的,属于非线程安全的操作,性能高。

总结:在开发之中多数情况下都应该是String类,可以改变的时候在选择StringBuilder、StringBuffer,多个线程访问同一资源时,使用StringBuffer。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/825700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号