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

深入理解Java中的字符串類型

 更新時間:2014年02月15日 15:49:05   作者:  
這篇文章主要介紹了Java中的字符串類型,需要的朋友可以參考下

1.Java內置對字符串的支持;
  所謂的內置支持,即不用像C語言通過char指針實現字符串類型,并且Java的字符串編碼是符合Unicode編碼標準,這也意味著不用像C++那樣通過使用string和wstring類實現與C語言兼容和Unicode標準。Java內部通過String類實現對字符串類型的支持。
這意味著:我們可以直接對字符串常量調用和String對象同樣的方法:


  //可以再"abc"上直接調用String對象的所有方法
  int length="abc".length();
    以及
  String abc=new String("abc");
  int length=abc.length();

2.Java中的字符串值是constant(常量的)

  這里的意思是字符串類型在創(chuàng)建完成之后,是不能改變其中的值的,從String的成員方法也可以看出沒有能改變值的方法接口;并且像"abc",new String("def")中的”abc","def"存放于Java虛擬機中的常量池。

以下的代碼中的"abc"存放于常量池中,因此變量a,ab指向的地址均為常量池中同一個"abc"。

復制代碼 代碼如下:

public class StringTest {
    public static void main(String[] args) {
        String a="abc";
        String ab="abc";
        String abc=new String("abc");
        System.out.println(ab==a);
        System.out.println(a==abc);
    }
}
/*程序輸出:
 * true
 * false
 * */

那么動態(tài)生成的、可變的字符串又是如何實現的呢?Java中提供StringBuffer和StringBuilder類實現這一需求;Java中字符串連接可以使用“+”操作符; 如:"abc"+"def";這里的內部實現也可以使用StringBuilder類或者StringBuffer類實現;那么StringBuilder和StringBuffer內部又是如何實現呢?是通過字符數組存儲字符串。以下是從JDK附帶的源碼中找到的片段,可以看出StringBuffer內部使用char數組對字符串進行存儲,其中的AbstractStringBuilder是StringBuffer的父類:

3.字符串中的編碼問題。
  這里要理解兩個問題:如何處理源文件中的字符串編碼?編譯成class文件或者是代碼在Java虛擬機運行時字符串是采用什么編碼的?
  第一個問題的理解是:源代碼中的字符串編碼取決于你的IDE或者文本編輯器。如以下的代碼是使用GBK編碼格式下編輯,然后使用UTF-8和GBK解碼打開
//GBK編碼格式,使用GBK格式打開

//GBK編碼格式,使用UTF-8格式打開,亂碼;如果此時系統(tǒng)默認的編碼格式不是GBK時,在編譯時需要在javac加入"-encoding GBK"參數選項值;

  那么如何處理這種源代碼編碼的問題呢?答案是在編譯器javac的參數選項-encoding中指定,默認這一參數的值是跟系統(tǒng)默認的編碼一致。Windows的默認編碼一般為GBK (可以通過System.getProperty("file.encoding")獲得該值);在系統(tǒng)默認編碼為GBK,但是源代碼使用UTF-8編碼,此時應該使用  javac -encoding UTF-8  進行編譯。

  對 ”編譯成class文件或者是代碼在Java虛擬機運行時字符串是采用什么編碼的?“ 這個問題的理解是:首先,Java中的String類型是采用UTF-16編碼實現的,也就是不管在源碼的編碼如何,在Java虛擬機中的字符串都是使用UTF-16編碼實現。這意味著只要編譯器javac正確的理解了源碼文件中字符串的編碼,運行時或者class字節(jié)碼文件中的字符串是獨立于源碼中的編碼格式的。這里我們可以進一步對java中的char基本類型或者Character類進行理解解,這兩者內部的編碼和java的字符串類型一樣,都是基于UTF-16編碼實現的,也就是不論‘a','1'這樣的字符還是漢字在Java中的長度都是16位。

  并且在String類型中也有著通過指定定字符編碼,對底層二進制表示和字符串之間進行轉化,也就意味著我們可以正確地讀取GBK編碼、UTF-8編碼或者其他編碼的文本文件或者其他輸入流將其轉化為內存中正確的字符串。

如String類中有如下的方法:
  public String(byte[] bytes, Charset charset);通過指定定字符集編碼類型,和相應的byte數組(byte長度為8位)構造字符串;
  public byte[] getBytes(Charset charset);指定字符集編碼類型,將字符串轉化為byte數組,即字符串的二進制表示。

還有需要注意String的另一個成員方法:

  public byte[] getBytes();這個方法返回的byte數組,所根據的字符集編碼是指平臺默認的字符集編碼,而不一定是UTF-16。

相關文章

  • springboot集成RestTemplate及常見的用法說明

    springboot集成RestTemplate及常見的用法說明

    這篇文章主要介紹了springboot集成RestTemplate及常見的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • spring boot整合mybatis使用c3p0數據源連接mysql

    spring boot整合mybatis使用c3p0數據源連接mysql

    這篇文章主要為大家詳細介紹了spring boot整合mybatis使用c3p0數據源連接mysql,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • SpringBoot使用H2嵌入式數據庫的實例代碼

    SpringBoot使用H2嵌入式數據庫的實例代碼

    本文通過實例代碼給大家介紹了SpringBoot使用H2嵌入式數據庫的相關知識,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-10-10
  • RocketMQ源碼本地搭建調試方法

    RocketMQ源碼本地搭建調試方法

    這篇文章主要介紹了RocketMQ源碼本地搭建調試,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • Spring?Cache?集成?Caffeine實現項目緩存的示例

    Spring?Cache?集成?Caffeine實現項目緩存的示例

    本文主要介紹了Spring?Cache?集成?Caffeine實現項目緩存的示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 基于SpringBoot創(chuàng)建Web頁面并熱更新的操作步驟

    基于SpringBoot創(chuàng)建Web頁面并熱更新的操作步驟

    SpringBoot是一個用于快速開發(fā)單個微服務的框架,它基于 Spring 框架,簡化了Spring應用的初始化過程和開發(fā)流程,本文給大家介紹了如何基于SpringBoot創(chuàng)建Web頁面并熱更新,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • 阿里四面之Spring Exception的原理解析

    阿里四面之Spring Exception的原理解析

    本文給大家介紹阿里四面之Spring Exception的原理解析,本文通過錯誤場景分析給大家詳細介紹Spring異常處理流程,感興趣的朋友一起看看吧
    2021-10-10
  • Java中的JSONObject使用方法和常用操作

    Java中的JSONObject使用方法和常用操作

    本文詳細介紹了Java中JSONObject的使用方法,包括創(chuàng)建、基本操作、高級特性和錯誤處理,通過示例代碼和解釋,幫助開發(fā)者更好地理解和使用JSONObject來處理JSON數據,感興趣的朋友一起看看吧
    2025-02-02
  • Java編程中使用JDBC API連接數據庫和創(chuàng)建程序的方法

    Java編程中使用JDBC API連接數據庫和創(chuàng)建程序的方法

    這篇文章主要介紹了Java編程中使用JDBC API連接數據庫和創(chuàng)建程序的基本教程,JDBC是一種用于執(zhí)行SQL語句的Java API,可以為多種關系數據庫提供統(tǒng)一訪問需要的朋友可以參考下
    2015-12-12
  • Docker?DockerFile部署java?jar項目包及Mysql和Redis的詳細過程

    Docker?DockerFile部署java?jar項目包及Mysql和Redis的詳細過程

    Dockerfile是一種用于構建Docker鏡像的文件格式,可以通過Dockerfile部署Java項目,這篇文章主要給大家介紹了關于Docker?DockerFile部署java?jar項目包及Mysql和Redis的詳細過程,需要的朋友可以參考下
    2023-12-12

最新評論

南丹县| 夹江县| 巴马| 阿城市| 松阳县| 木兰县| 泽州县| 新晃| 图木舒克市| 德昌县| 监利县| 南平市| 漳平市| 盐池县| 怀化市| 侯马市| 罗平县| 安徽省| 玉龙| 台山市| 海兴县| 大足县| 介休市| 旺苍县| 涞源县| 上思县| 肃宁县| 瑞金市| 永仁县| 卢龙县| 高安市| 崇左市| 玉屏| 平原县| 赤水市| 新疆| 东源县| 崇信县| 乐亭县| 永和县| 德安县|