亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的length和length()深入分析

 更新時(shí)間:2016年11月13日 16:09:52   投稿:daisy  
java中的length屬性是針對(duì)數(shù)組說(shuō)的,比如說(shuō)你聲明了一個(gè)數(shù)組,想知道這個(gè)數(shù)組的長(zhǎng)度則用到了length這個(gè)屬性。java中的length()方法是針對(duì)字符串String說(shuō)的,如果想看這個(gè)字符串的長(zhǎng)度則用到length()這個(gè)方法。這篇文章將介紹幾個(gè)關(guān)于Java數(shù)組的關(guān)鍵概念。

在開(kāi)始本文前先考慮以下一個(gè)問(wèn)題

在不使用任何帶有自動(dòng)補(bǔ)全功能IDE的情況下,如何獲取一個(gè)數(shù)組的長(zhǎng)度?以及,如何獲取一個(gè)字符串的長(zhǎng)度?

這個(gè)問(wèn)題我問(wèn)過(guò)不同水平的程序員,包括初級(jí)和中級(jí)水平的。他們都不能準(zhǔn)確而自信地回答這個(gè)問(wèn)題(如果你能很準(zhǔn)確很自信的回答這個(gè)問(wèn)題,那么證明針對(duì)這一知識(shí)點(diǎn)你比大多數(shù)中級(jí)程序員掌握的好)。由于現(xiàn)在很多IDE都有代碼補(bǔ)全功能,這使得開(kāi)發(fā)人員在很多問(wèn)題上都理解的很膚淺。

上面問(wèn)題的正確回答姿勢(shì)應(yīng)該是這樣的:

int[] arr = new int[3];
System.out.println(arr.length);//使用length獲取數(shù)組的程度

String str = "abc";
System.out.println(str.length());//使用length()獲取字符串的長(zhǎng)度

那么問(wèn)題來(lái)了,為什么數(shù)組有l(wèi)ength屬性,而字符串沒(méi)有?或者,為什么字符串有length()方法,而數(shù)組沒(méi)有?

為什么數(shù)組有l(wèi)ength屬性?

首先,數(shù)組是一個(gè)容器對(duì)象,其中包含固定數(shù)量的同一類(lèi)型的值。一旦數(shù)組被創(chuàng)建,他的長(zhǎng)度就是固定的了。數(shù)組的長(zhǎng)度可以作為final實(shí)例變量的長(zhǎng)度。因此,長(zhǎng)度可以被視為一個(gè)數(shù)組的屬性。

有兩種創(chuàng)建數(shù)組的方法:

     1、通過(guò)數(shù)組表達(dá)式創(chuàng)建數(shù)組。

     2、通過(guò)初始化值創(chuàng)建數(shù)組。

無(wú)論使用哪種方式,一旦數(shù)組被創(chuàng)建,其大小就固定了。

使用表達(dá)式創(chuàng)建數(shù)組方式如下,該方式指明了元素類(lèi)型、數(shù)組的維度、以及至少一個(gè)維度的數(shù)組的長(zhǎng)度。

該聲明方式是符合要求的,因?yàn)樗付艘粋€(gè)維度的長(zhǎng)度(該數(shù)組的類(lèi)型為int,維度為2,第一維度的長(zhǎng)度為3)

int[][] arr = new int[3][];

使用數(shù)組初始化的方式創(chuàng)建數(shù)組時(shí)需要提供所有的初始值。形式是使用{和}將所有初始值括在一起并用,隔開(kāi)。

int[] arr = {1,2,3};

注:

這里可能會(huì)有一個(gè)疑問(wèn),既然數(shù)組大小是初始化時(shí)就規(guī)定好的,那么int[][] arr = new int[3][];定義的數(shù)組并沒(méi)有給出數(shù)組的第二維的大小,那么這個(gè)arr的長(zhǎng)度到底是如何“規(guī)定好”的呢?

其實(shí),arr的長(zhǎng)度就是3。其實(shí)Java中所有的數(shù)組,無(wú)論幾維,其實(shí)都是一維數(shù)組。例如arr,分配了3個(gè)空間,每個(gè)空間存放一個(gè)一維數(shù)組的地址,這樣就成了“二維”數(shù)組。但是對(duì)于arr來(lái)說(shuō),他的長(zhǎng)度就是3。

int[][] a=new int[3][];
System.out.println(a.length);//3
int[][] b=new int[3][5];
System.out.println(b.length);//3

Java中為什么沒(méi)有定義一個(gè)類(lèi)似String一樣Array類(lèi)

因?yàn)閿?shù)組也是對(duì)象,所以下面的代碼也是合法的:

Object obj = new int[10];

數(shù)組包含所有從Object繼承下來(lái)方法(Java中數(shù)組的繼承關(guān)系),除clone()之外。為什么沒(méi)有一個(gè)array類(lèi)呢?在Java中沒(méi)有Array.java文件。一個(gè)簡(jiǎn)單的解釋是它被隱藏起來(lái)了(注:Java中的數(shù)組有點(diǎn)類(lèi)似于基本數(shù)據(jù)類(lèi)型,是一個(gè)內(nèi)建類(lèi)型,并沒(méi)有實(shí)際的類(lèi)與他對(duì)應(yīng))。你可以思考這樣一個(gè)問(wèn)題——如果有一個(gè)Array類(lèi),那它會(huì)像什么樣?它會(huì)仍然需要一個(gè)數(shù)組來(lái)存放所有的數(shù)組元素,對(duì)嗎?因此,定義出一個(gè)Array類(lèi)不是一個(gè)好的主意。(譯者注:這里可能有點(diǎn)繞,道理有點(diǎn)類(lèi)似于:雞生蛋蛋生雞問(wèn)題,可能比喻也不是很恰當(dāng),請(qǐng)讀者自行理解)

事實(shí)上我們可以獲得數(shù)組的類(lèi)定義,通過(guò)下面的代碼:

int[] arr = new int[3];
System.out.println(arr.getClass());

輸出:

class [I

“class [I”代表著”成員類(lèi)型是int的數(shù)組”的class對(duì)象運(yùn)行時(shí)類(lèi)型的簽名

為什么String有l(wèi)ength()方法?

String背后的數(shù)據(jù)結(jié)構(gòu)是一個(gè)char數(shù)組,所以沒(méi)有必要來(lái)定義一個(gè)不必要的屬性(因?yàn)樵搶傩栽赾har數(shù)值中已經(jīng)提供了)。和C不同的是,Java中char的數(shù)組并不等于字符串,雖然String的內(nèi)部機(jī)制是char數(shù)組實(shí)現(xiàn)的。(注:C語(yǔ)言中,并沒(méi)有String類(lèi),定義字符串通常使用char string[6] = "hollis";的形式)

注:要想把char[]轉(zhuǎn)成字符串有以下方式:

char []s = {'a','b','c'};
String string1 = s.toString();
String string2 = new String(s);
String string3 = String.valueOf(s);

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用Java能有所幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • Spring 使用注解方式進(jìn)行事務(wù)管理配置方式

    Spring 使用注解方式進(jìn)行事務(wù)管理配置方式

    本篇文章主要介紹了Spring 使用注解方式進(jìn)行事務(wù)管理配置方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Hutool?Java工具類(lèi)庫(kù)_ExcelUtil的使用

    Hutool?Java工具類(lèi)庫(kù)_ExcelUtil的使用

    這篇文章主要介紹了Hutool?Java工具類(lèi)庫(kù)_ExcelUtil的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java實(shí)現(xiàn)斗地主小案例

    java實(shí)現(xiàn)斗地主小案例

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)斗地主小案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Spring Boot @Scheduled定時(shí)任務(wù)代碼實(shí)例解析

    Spring Boot @Scheduled定時(shí)任務(wù)代碼實(shí)例解析

    這篇文章主要介紹了Spring Boot @Scheduled定時(shí)任務(wù)代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 從字節(jié)碼角度解析synchronized和反射實(shí)現(xiàn)原理

    從字節(jié)碼角度解析synchronized和反射實(shí)現(xiàn)原理

    這篇文章主要介紹了從字節(jié)碼角度解析synchronized和反射的實(shí)現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • KotlinScript構(gòu)建SpringBootStarter保姆級(jí)教程

    KotlinScript構(gòu)建SpringBootStarter保姆級(jí)教程

    這篇文章主要為大家介紹了KotlinScript構(gòu)建SpringBootStarter的保姆級(jí)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • springboot中pom.xml文件注入test測(cè)試依賴時(shí)報(bào)錯(cuò)的解決

    springboot中pom.xml文件注入test測(cè)試依賴時(shí)報(bào)錯(cuò)的解決

    這篇文章主要介紹了springboot中pom.xml文件注入test測(cè)試依賴時(shí)報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Mybatis 創(chuàng)建方法、全局配置教程詳解

    Mybatis 創(chuàng)建方法、全局配置教程詳解

    MyBatis是一個(gè)半自動(dòng)化的輕量級(jí)的持久化層框架。 MyBatis實(shí)際上是Ibatis3.0版本以后的持久化層框架,下面通過(guò)本文給大家分享Mybatis 創(chuàng)建方法、全局配置教程詳解,需要的朋友參考下吧
    2017-09-09
  • java中的DateTime的具體使用

    java中的DateTime的具體使用

    本文主要介紹了java中的DateTime的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java String類(lèi)正則操作示例

    Java String類(lèi)正則操作示例

    這篇文章主要介紹了Java String類(lèi)正則操作,結(jié)合實(shí)例形式分析了java針對(duì)數(shù)字的正則驗(yàn)證、過(guò)濾及郵箱正則驗(yàn)證相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07

最新評(píng)論