黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 一文看懂Java字符串數(shù)據(jù)類型都有哪些

一文看懂Java字符串數(shù)據(jù)類型都有哪些

更新時間:2022-11-23 08:53:14 來源:動力節(jié)點 瀏覽2578次

Java中的字符串類型

在Java中一共提供了三種類型可以表示字符串:String、StringBuilder、StringBuffer。

要談?wù)摓槭裁从腥齻€字符串類型,我們要先聊聊String的一些特性。

String

1.String是唯一一個設(shè)計了字面常量的引用數(shù)據(jù)類型

String str = "hello";
System.out.println("請輸入:");

回顧: 常量指的是不能修改變化的數(shù)據(jù)量,與它對應(yīng)的是變量。常量分兩種:

(1)符號常量;

(2)字面常量 “符號常量”是給常量起一個名字(符號)

final int STUDENT_NUM = 50;
final double PI = 3.14;
final double PRICE = 3.14;

為什么要給常量起名字? 把業(yè)務(wù)含義帶入到數(shù)據(jù)量當中; 便于修改,一改全改;

“字面常量”其實更常用,但也更容易被忽略。 當我們在代碼中出現(xiàn):5L,-19,3.4,3.14f,'A',"你的年齡是:"。 所以,注意--字面常量的特點,特別是它的字面書寫形式代表了數(shù)據(jù)類型。

言歸正傳,我們可以很容易的發(fā)現(xiàn)幾乎所有的字面常量都是基本數(shù)據(jù)類型,唯有String這個引用數(shù)據(jù)類型擁有一個字面常量的設(shè)計!

2.String擁有一個“字符串常量池”的設(shè)計

由于String的使用量非常大,所以對于String的字面常量,Java在設(shè)計的時候?qū)iT提供的了一個“常量池”來優(yōu)化。 “池”技術(shù),是你們現(xiàn)在第一次接觸,但以后會大量的出現(xiàn)。所謂池,就是預(yù)先在內(nèi)存當中放置一系列的對象(字符串常量池就是放的字符串常量對象)。當需要使用的時候,不用臨時去創(chuàng)建,而是從池當中取一個來用就可以了。

JVM會在加載的時候,把加載到的類代碼當中,所有書寫的字符串常量對象,預(yù)存到一個專門的內(nèi)容空間---"字符串常量池"。然后開始執(zhí)行指令語句,當需要用到這個字符串常量對象的時候,就直接到常量池中去取。 演示

    String s0 = "hello";
    String s1 = "hello";

此時,在加載期,就會在常量池當中產(chǎn)生一個String類型的對象,里面的值是hello。然后運行起來以后,s0和s1都會被賦值為這個對象的引用。所以,用"=="比較的時候,我們能得到true。

String s3 = new String("hello");

由于使用了new的語法,那么會在內(nèi)存的堆當中產(chǎn)生一個全新的String對象,里面的字符值是hello。

String判斷非空,應(yīng)該判斷兩個條件。

其他的引用數(shù)據(jù)類型,只需要判斷是否“==”null;但是String有一種特殊性,它可能不為null,但是指向的String對象里面沒有存放字符數(shù)據(jù),是一個空串。 所以String判斷非空要用兩個條件

  //如果輸入為空
if(str == null || str.equals("")){
  
}
  //如果輸入不為空
if(str != null && !str.equals("")){
}      

String對象的值一旦確定,不能改變。

String的這個特點其實是和String的源代碼設(shè)計有關(guān)系。我們可以把String看成是一個封裝的char[]。

public final class String{?
    private final char[] value;    
    /*
        還有其他屬性和一大堆的方法。
    */?
}

在這個設(shè)計當中,我們可以看到字符串中的數(shù)據(jù)值是被作為屬性存在的,而且該屬性是私有的,所以外部不能直接操作,要利用String提供的方法來操作;同時該屬性是final的,所以它的值不能被修改。

到了JDK8之后,這個char[]被優(yōu)化成了byte[]。因為不是所有的字符都需要2個字節(jié)的空間,很多只需要1個字節(jié)空間就可以了。

這種內(nèi)容不可更改的特性又會照成一個新的問題,當我們大量的在程序中做字符串拼接或需要修改字符串內(nèi)容的動作時,就會產(chǎn)生很多字符串對象。 所以,Java又設(shè)計了新的字符串類型專門解決這個問題。

StringBuilder和StringBuffer

StringBuilder 是在JDK5當中,提出來的一個輔助String的字符串類型。它最大的特點是:內(nèi)容可變。 注意:StringBuilder不是String類型,是一種新的類型,所以如下代碼都是錯的:

StringBuilder sb = "hello";
System.out.println(sb + "world");

由于StringBuilder是為了彌補String在內(nèi)容不可變上的缺點,所以它提供的方法幾乎都是對內(nèi)容的修改方法。

1.append()方法 它的作用是在字符串的尾部添加內(nèi)容。為了能夠?qū)⒍喾N數(shù)據(jù)類型都方便的添加到尾部,提供了大量的重載方法。

2.delete()方法 它的作用是在字符串中刪掉指定從開始下標到結(jié)束下標的內(nèi)容。

3.insert()方法 它的作用是在字符串中指定位置插入新的內(nèi)容。它的第一個參數(shù)就是插入位置的下標。

4、replace()方法 它的作用是把字符串中指定位置的內(nèi)容替換為新的內(nèi)容。StringBuffer也是一個可變的字符串序列,它和StringBuilder的構(gòu)造、提供的行為完全一樣。唯一的區(qū)別就是:StringBuffer是線程安全的。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 精选国产门事件福利在线观看 | 成人免费小视频 | 婷婷亚洲综合五月天在线 | 亚洲欧美一区二区三区图片 | 国产成人精品cao在线 | 国产高清啪啪 | 黄色一级片黄色一级片 | 亚洲国产欧美日韩 | 欧美视 | 中文字幕第二页在线 | 在线视频不卡国产在线视频不卡 | 边做边叫床的大尺度床戏欧美 | 欧美午夜免费看爽爽爽 | 青春草视频 | 最近的中文字幕2019更新 | 天天弄天天模 | www.一级毛片 | 91好色视频 | 午夜在线观看免费观看大全 | 中文字幕有码视频 | 韩国日本三级在线 | 农村妇女又色黄一级毛片 | 亚洲欧洲色天使日韩精品 | 一级做a爱免费观看视频 | 男女下面进视频免费 | 男生插女生阴道视频 | 精品国产一区二区三区麻豆小说 | 黄色亚洲片| 成人怡红院 | 波多野结衣视频一区 | 一级毛片成人免费看a | 韩日在线| 免费a级人成a大片在线观看 | 国产亚洲精品看片在线观看 | 亚洲中字| 日韩成人一级 | 狠狠色丁香婷婷综合精品视频 | 欧美成人精品高清在线观看 | 成人性动漫高清免费观看网址 | 国产三级全黄在线观看 | 日韩亚洲一区中文字幕 |