最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA中StringBuffer與String的區(qū)別解析

 更新時(shí)間:2014年02月21日 15:02:11   作者:  
這篇文章主要介紹了JAVA中StringBuffer與String的區(qū)別解析,需要的朋友可以參考下

看到這個(gè)講解的不錯(cuò),所以轉(zhuǎn)一下

在java中有3個(gè)類來負(fù)責(zé)字符的操作。

1.Character 是進(jìn)行單個(gè)字符操作的,

2.String 對一串字符進(jìn)行操作,不可變類。

3.StringBuffer 也是對一串字符進(jìn)行操作,是可變類。

String:
    是對象不是原始類型.
    為不可變對象,一旦被創(chuàng)建,就不能修改它的值.
    對于已經(jīng)存在的String對象的修改都是重新創(chuàng)建一個(gè)新的對象,然后把新的值保存進(jìn)去.
String 是final類,即不能被繼承.

StringBuffer:
    是一個(gè)可變對象,當(dāng)對他進(jìn)行修改的時(shí)候不會像String那樣重新建立對象
    它只能通過構(gòu)造函數(shù)來建立,
    StringBuffer sb = new StringBuffer();
注意:不能通過賦值符號對它進(jìn)行付值.
sb = "welcome to here!";//error
對象被建立以后,在內(nèi)存中就會分配內(nèi)存空間,并初始保存一個(gè)null.向StringBuffer中賦值的時(shí)候可以通過它的append()方法.
sb.append("hello");

字符串連接操作中StringBuffer的效率要比String高:

String str = new String("welcome to ");
str += "here";
的處理步驟實(shí)際上是通過建立一個(gè)StringBuffer,然后調(diào)用append(),最后
再將StringBuffer toSting();
這樣的話String的連接操作就比StringBuffer多出了一些附加操作,當(dāng)然效率上要打折扣.

并且由于String 對象是不可變對象,每次操作Sting 都會重新建立新的對象來保存新的值.
這樣原來的對象就沒用了,就要被垃圾回收.這也是要影響性能的.

看看以下代碼:
將26個(gè)英文字母重復(fù)加了5000次,

復(fù)制代碼 代碼如下:

        String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart1 = System.currentTimeMillis();
        String str = "";
        for (int i = 0; i < times; i++) {
            str += tempstr;
        }
        long lend1 = System.currentTimeMillis();
        long time = (lend1 - lstart1);
        System.out.println(time);

可惜我的計(jì)算機(jī)不是超級計(jì)算機(jī),得到的結(jié)果每次不一定一樣一般為 46687左右。
也就是46秒。
我們再看看以下代碼
復(fù)制代碼 代碼如下:

        String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart2 = System.currentTimeMillis();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < times; i++) {
            sb.append(tempstr);
        }
        long lend2 = System.currentTimeMillis();
        long time2 = (lend2 - lstart2);
        System.out.println(time2);

得到的結(jié)果為 16 有時(shí)還是 0
所以結(jié)論很明顯,StringBuffer 的速度幾乎是String 上萬倍。當(dāng)然這個(gè)數(shù)據(jù)不是很準(zhǔn)確。因?yàn)檠h(huán)的次數(shù)在100000次的時(shí)候,差異更大。不信你試試

如果還是不能夠明白:

1)String的聯(lián)合+方法與StringBuff的append方法的區(qū)別:

String的+運(yùn)算符在進(jìn)行字符串運(yùn)算時(shí),首先將當(dāng)前的字符串對象轉(zhuǎn)換為StringBuff 類型,調(diào)用其append方法,最后再將生成的StringBuff 對象通過其toString 方法轉(zhuǎn)換為String類型的字符串,所以其效率要低。

但是在可讀性上,還是String的連接運(yùn)算符要高。

2)StringBuff是線程安全的

String是線程是非安全的

3)String是不可以修改的字符串對象,而StringBuff是可以修改的。

復(fù)制代碼 代碼如下:

public static boolean fileCopy(String srcStr, String destStr) {

File srcFile = null;

File destFile = null;

Reader reader = null;

Writer writer = null;

boolean flag = false;

try {

srcFile = new File(srcStr);

if (!srcFile.exists()) {

System.out.println(“源文件不存在”);

System.exit(0);

} else {

reader = new FileReader(srcFile);

}

destFile = new File(destStr);

writer = new FileWriter(destFile);

char[] buff = new char[1024];

int len;

String str = “”;

StringBuffer sbuff = new StringBuffer();

while ((len = reader.read(buff)) != -1) {

//        str += new String(buff, 0, len);

sbuff.append(new String(buff,0,len));

}

//      writer.write(str.toCharArray());

writer.write(sbuff.toString().toCharArray());

flag = true;

writer.flush();

reader.close();

writer.close();

} catch (IOException e) {

System.out.println(“文件拷貝異常:= ” + e.getMessage());

}

return flag;

}

相關(guān)文章

  • 使用IntelliJ?IDEA創(chuàng)建簡單的Java?Web項(xiàng)目完整步驟

    使用IntelliJ?IDEA創(chuàng)建簡單的Java?Web項(xiàng)目完整步驟

    這篇文章主要介紹了如何使用IntelliJ?IDEA創(chuàng)建一個(gè)簡單的JavaWeb項(xiàng)目,實(shí)現(xiàn)登錄、注冊和查看用戶列表功能,使用Servlet和JSP技術(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • Spring Boot應(yīng)用監(jiān)控的實(shí)戰(zhàn)教程

    Spring Boot應(yīng)用監(jiān)控的實(shí)戰(zhàn)教程

    Spring Boot 提供運(yùn)行時(shí)的應(yīng)用監(jiān)控和管理功能,下面這篇文章主要給大家介紹了關(guān)于Spring Boot應(yīng)用監(jiān)控的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 簡單了解Java中的可重入鎖

    簡單了解Java中的可重入鎖

    這篇文章主要介紹了簡單了解Java中的可重入鎖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java使用FileReader讀取文件詳解

    Java使用FileReader讀取文件詳解

    本文將為大家介紹FileReader類的基本用法,包括如何創(chuàng)建FileReader對象,如何讀取文件,以及如何關(guān)閉流,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-09-09
  • Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能

    Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能

    這篇文章主要介紹了Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • SpringCloud項(xiàng)目中集成Sentinel問題

    SpringCloud項(xiàng)目中集成Sentinel問題

    在SpringCloud項(xiàng)目中集成Sentinel,可以實(shí)現(xiàn)流量控制、熔斷降級等功能,提升系統(tǒng)穩(wěn)定性和可用性,集成步驟包括添加Sentinel依賴、配置控制臺地址、啟動(dòng)控制臺、配置限流熔斷規(guī)則、使用注解和集成SpringCloudGateway,這有助于處理高并發(fā)場景,保護(hù)服務(wù)穩(wěn)定運(yùn)行
    2024-10-10
  • SpringBoot+logback默認(rèn)日志的配置和使用方式

    SpringBoot+logback默認(rèn)日志的配置和使用方式

    這篇文章主要介紹了SpringBoot+logback默認(rèn)日志的配置和使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 詳解Java?List中五種常見實(shí)現(xiàn)類的使用

    詳解Java?List中五種常見實(shí)現(xiàn)類的使用

    Java中提供了非常多的使用的List實(shí)現(xiàn)類,本文將重點(diǎn)介紹一下常見的五種實(shí)現(xiàn)類以及他們的應(yīng)用場景,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • RabbitMQ中的延遲隊(duì)列機(jī)制詳解

    RabbitMQ中的延遲隊(duì)列機(jī)制詳解

    這篇文章主要介紹了RabbitMQ中的延遲隊(duì)列機(jī)制詳解,延時(shí)隊(duì)列內(nèi)部是有序的,最重要的特性就體現(xiàn)在它的延時(shí)屬性上,延時(shí)隊(duì)列中的元素是希望,在指定時(shí)間到了以后或之前取出和處理,簡單來說,延時(shí)隊(duì)列就是用來存放需要在指定時(shí)間被處理的元素的隊(duì)列,需要的朋友可以參考下
    2023-09-09
  • maven配置文件pom增加變量取版本號方式

    maven配置文件pom增加變量取版本號方式

    這篇文章主要介紹了maven配置文件pom增加變量取版本號方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

天全县| 广州市| 双牌县| 应城市| 错那县| 互助| 宜兰县| 连云港市| 福安市| 舒兰市| 宁明县| 丹阳市| 六枝特区| 澄城县| 黄平县| 青川县| 台南县| 涟源市| 龙川县| 抚顺市| 高邮市| 渭源县| 会昌县| 安远县| 通城县| 越西县| 梁河县| 岳普湖县| 澎湖县| 子长县| 镇远县| 临清市| 山丹县| 青龙| 古浪县| 大方县| 蓬莱市| 珲春市| 商洛市| 许昌市| 金华市|