大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

一文看懂Java字符串數據類型都有哪些

更新時間:2022-11-23 08:53:14 來源:動力節點 瀏覽2388次

Java中的字符串類型

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

要談論為什么有三個字符串類型,我們要先聊聊String的一些特性。

String

1.String是唯一一個設計了字面常量的引用數據類型

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

回顧: 常量指的是不能修改變化的數據量,與它對應的是變量。常量分兩種:

(1)符號常量;

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

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

為什么要給常量起名字? 把業務含義帶入到數據量當中; 便于修改,一改全改;

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

言歸正傳,我們可以很容易的發現幾乎所有的字面常量都是基本數據類型,唯有String這個引用數據類型擁有一個字面常量的設計!

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

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

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

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

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

String s3 = new String("hello");

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

String判斷非空,應該判斷兩個條件。

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

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

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

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

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

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

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

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

StringBuilder和StringBuffer

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

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

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

1.append()方法 它的作用是在字符串的尾部添加內容。為了能夠將多種數據類型都方便的添加到尾部,提供了大量的重載方法。

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

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

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久在线 | 欧美国产亚洲一区二区三区 | 亚洲免费资源 | 久揄揄鲁一二三四区高清在线 | 欧美一区二区三区影院 | 伊人精品视频在线 | 女bbbxxx毛片视频 | 九九这里有精品 | 国产精品亚洲一区二区麻豆 | 国产精品中文 | 精品国产欧美一区二区最新 | 日本操操操 | 久草中文网 | 国产成人亚洲欧美三区综合 | 美女洗澡一级毛片 | 日韩一区二区视频 | 国产极品白嫩美女在线观看看 | 国产精品人成在线播放新网站 | 日韩精品特黄毛片免费看 | 久热在线视频 | 国产一区二区福利久久 | 免费观看黄色网 | 国产精品免费综合一区视频 | 精品国产人成在线 | 日本中文在线三级在线播放 | 欧美国产永久免费看片 | 欧美高清激情毛片 | 久久www免费人成_看片高清 | 国产区成人综合色在线 | 国产精品视频免费在线观看 | 国产精品99re | 日本免费人成黄页网观看视频 | 白云精品视频国产专区 | 欧美成人一区二区三区 | 最近免费中文字幕大全免费版视频 | 日韩毛片免费线上观看 | 婷婷国产偷v国产偷v亚洲 | 四虎免费播放观看在线视频 | 色老老精品偷偷鲁 | 国产一级影视 | 亚洲高清视频在线播放 |