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

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

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

在開始本文前先考慮以下一個問題

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

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

上面問題的正確回答姿勢應該是這樣的:

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

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

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

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

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

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

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

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

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

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

該聲明方式是符合要求的,因為他指定了一個維度的長度(該數(shù)組的類型為int,維度為2,第一維度的長度為3)

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

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

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

注:

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

其實,arr的長度就是3。其實Java中所有的數(shù)組,無論幾維,其實都是一維數(shù)組。例如arr,分配了3個空間,每個空間存放一個一維數(shù)組的地址,這樣就成了“二維”數(shù)組。但是對于arr來說,他的長度就是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中為什么沒有定義一個類似String一樣Array類

因為數(shù)組也是對象,所以下面的代碼也是合法的:

Object obj = new int[10];

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

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

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

輸出:

class [I

“class [I”代表著”成員類型是int的數(shù)組”的class對象運行時類型的簽名

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

String背后的數(shù)據(jù)結構是一個char數(shù)組,所以沒有必要來定義一個不必要的屬性(因為該屬性在char數(shù)值中已經提供了)。和C不同的是,Java中char的數(shù)組并不等于字符串,雖然String的內部機制是char數(shù)組實現(xiàn)的。(注:C語言中,并沒有String類,定義字符串通常使用char string[6] = "hollis";的形式)

注:要想把char[]轉成字符串有以下方式:

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用Java能有所幫助,如果有疑問大家可以留言交流。

相關文章

  • java+vue3+el-tree實現(xiàn)樹形結構操作代碼

    java+vue3+el-tree實現(xiàn)樹形結構操作代碼

    基于springboot + vue3 elementPlus實現(xiàn)樹形結構數(shù)據(jù)的添加、刪除和頁面展示,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Java關鍵字final的實現(xiàn)原理分析

    Java關鍵字final的實現(xiàn)原理分析

    這篇文章主要介紹了Java關鍵字final的實現(xiàn)原理分析,在JDK8之前,如果在匿名內部類中需要訪問局部變量,那么這個局部變量一定是final修飾的,但final關鍵字可以省略,需要的朋友可以參考下
    2024-01-01
  • 淺談自定義注解在Spring中的應用

    淺談自定義注解在Spring中的應用

    這篇文章主要介紹了淺談自定義注解在Spring中的應用,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java中的ByteArrayInputStream詳解

    Java中的ByteArrayInputStream詳解

    Java中,ByteArrayInputStream類是實現(xiàn)內存級別的字節(jié)流讀取的工具,可以從字節(jié)數(shù)組中讀取數(shù)據(jù),這個類位于java.io包中,繼承自InputStream,ByteArrayInputStream的主要特點有:在內存中操作,不涉及磁盤IO,可以重用流讀取數(shù)據(jù)
    2024-09-09
  • SpringCloud搭建Eureka服務模塊的過程

    SpringCloud搭建Eureka服務模塊的過程

    Eureka在分布式系統(tǒng)中起到了連接各個微服務的紐帶作用,使得服務之間的交互變得更加靈活、可靠,本文將深入探討如何使用Spring?Cloud,逐步引導讀者完成Eureka服務模塊的搭建,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 詳解Java代碼常見優(yōu)化方案

    詳解Java代碼常見優(yōu)化方案

    這篇文章主要介紹了Java代碼常見優(yōu)化方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 基于springboot實現(xiàn)文件上傳

    基于springboot實現(xiàn)文件上傳

    這篇文章主要為大家詳細介紹了基于springboot實現(xiàn)文件上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 關于設置Mybatis打印調試sql的兩種方式

    關于設置Mybatis打印調試sql的兩種方式

    這篇文章主要介紹了關于設置Mybatis打印調試sql的兩種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MyBatis如何調用存儲過程

    MyBatis如何調用存儲過程

    這篇文章主要介紹了MyBatis如何調用存儲過程問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Idea如何使用Fast Request接口調試

    Idea如何使用Fast Request接口調試

    這篇文章主要介紹了Idea如何使用Fast Request接口調試問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論

桑植县| 和平县| 金山区| 惠东县| 东光县| 泰安市| 嘉荫县| 申扎县| 金塔县| 宿州市| 赤水市| 甘德县| 自贡市| 宕昌县| 邵武市| 舞钢市| 磴口县| 新兴县| 彭水| 鸡泽县| 乡宁县| 砀山县| 天长市| 都江堰市| 昔阳县| 宜君县| 黔西县| 德阳市| 河南省| 嵊泗县| 平江县| 高邮市| 文昌市| 贵阳市| 夏津县| 浦县| 尼木县| 安岳县| 轮台县| 潼关县| 永和县|