'一文帶你深入分析Java中的length和length(),就是這麼簡單'

Java 程序員 集成開發環境 編程仔日常 2019-07-16
"

文章來源:https://mp.weixin.qq.com/s/_O9llQcodBqngbZxrJj9cA

"

文章來源:https://mp.weixin.qq.com/s/_O9llQcodBqngbZxrJj9cA

一文帶你深入分析Java中的length和length(),就是這麼簡單

在開始正文之前,請你快速回答如下問題:

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

這個問題我問過不同水平的程序員,包括初級和中級水平的。他們都不能準確而自信地回答這個問題(如果你能很準確很自信的回答這個問題,那麼證明針對這一知識點你比大多數中級程序員掌握的好)。由於現在很多IDE都有代碼補全功能,這使得開發人員在很多問題上都理解的很膚淺。本文將介紹幾個關於Java數組的關鍵概念。

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

"

文章來源:https://mp.weixin.qq.com/s/_O9llQcodBqngbZxrJj9cA

一文帶你深入分析Java中的length和length(),就是這麼簡單

在開始正文之前,請你快速回答如下問題:

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

這個問題我問過不同水平的程序員,包括初級和中級水平的。他們都不能準確而自信地回答這個問題(如果你能很準確很自信的回答這個問題,那麼證明針對這一知識點你比大多數中級程序員掌握的好)。由於現在很多IDE都有代碼補全功能,這使得開發人員在很多問題上都理解的很膚淺。本文將介紹幾個關於Java數組的關鍵概念。

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

一文帶你深入分析Java中的length和length(),就是這麼簡單

那麼問題來了,為什麼數組有length屬性,而字符串沒有?或者,為什麼字符串有length()方法,而數組沒有?

為什麼數組有length屬性?

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

有兩種創建數組的方法:

1、通過數組表達式創建數組。

2、通過初始化值創建數組。

無論使用哪種方式,一旦數組被創建,其大小就固定了。

使用表達式創建數組方式如下,該方式指明瞭元素類型、數組的維度、以及至少一個維度的數組的長度。

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

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

使用數組初始化的方式創建數組時需要提供所有的初始值。形式是使用{和}將所有初始值括在一起並用,隔開。

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

注:

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

其實,arr的長度就是3。其實Java中所有的數組,無論幾維,其實都是一維數組。例如arr,分配了3個空間,每個空間存放一個一維數組的地址,這樣就成了“二維”數組。但是對於arr來說,他的長度就是3。

"

文章來源:https://mp.weixin.qq.com/s/_O9llQcodBqngbZxrJj9cA

一文帶你深入分析Java中的length和length(),就是這麼簡單

在開始正文之前,請你快速回答如下問題:

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

這個問題我問過不同水平的程序員,包括初級和中級水平的。他們都不能準確而自信地回答這個問題(如果你能很準確很自信的回答這個問題,那麼證明針對這一知識點你比大多數中級程序員掌握的好)。由於現在很多IDE都有代碼補全功能,這使得開發人員在很多問題上都理解的很膚淺。本文將介紹幾個關於Java數組的關鍵概念。

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

一文帶你深入分析Java中的length和length(),就是這麼簡單

那麼問題來了,為什麼數組有length屬性,而字符串沒有?或者,為什麼字符串有length()方法,而數組沒有?

為什麼數組有length屬性?

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

有兩種創建數組的方法:

1、通過數組表達式創建數組。

2、通過初始化值創建數組。

無論使用哪種方式,一旦數組被創建,其大小就固定了。

使用表達式創建數組方式如下,該方式指明瞭元素類型、數組的維度、以及至少一個維度的數組的長度。

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

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

使用數組初始化的方式創建數組時需要提供所有的初始值。形式是使用{和}將所有初始值括在一起並用,隔開。

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

注:

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

其實,arr的長度就是3。其實Java中所有的數組,無論幾維,其實都是一維數組。例如arr,分配了3個空間,每個空間存放一個一維數組的地址,這樣就成了“二維”數組。但是對於arr來說,他的長度就是3。

一文帶你深入分析Java中的length和length(),就是這麼簡單

Java中為什麼沒有定義一個類似String一樣Array類

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

Object obj = new int[10];

數組包含所有從Object繼承下來方法,除clone()之外。為什麼沒有一個Array類呢?在Java中沒有Array.java文件。一個簡單的解釋是它被隱藏起來了(注:Java中的數組有點類似於基本數據類型,是一個內建類型,並沒有實際的類與他對應)。

你可以思考這樣一個問題——如果有一個Array類,那它會像什麼樣?它會仍然需要一個數組來存放所有的數組元素,對嗎?因此,定義出一個Array類不是一個好的主意。(注:這裡可能有點繞,道理有點類似於:雞生蛋蛋生雞問題,可能比喻也不是很恰當,請讀者自行理解)

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

"

文章來源:https://mp.weixin.qq.com/s/_O9llQcodBqngbZxrJj9cA

一文帶你深入分析Java中的length和length(),就是這麼簡單

在開始正文之前,請你快速回答如下問題:

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

這個問題我問過不同水平的程序員,包括初級和中級水平的。他們都不能準確而自信地回答這個問題(如果你能很準確很自信的回答這個問題,那麼證明針對這一知識點你比大多數中級程序員掌握的好)。由於現在很多IDE都有代碼補全功能,這使得開發人員在很多問題上都理解的很膚淺。本文將介紹幾個關於Java數組的關鍵概念。

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

一文帶你深入分析Java中的length和length(),就是這麼簡單

那麼問題來了,為什麼數組有length屬性,而字符串沒有?或者,為什麼字符串有length()方法,而數組沒有?

為什麼數組有length屬性?

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

有兩種創建數組的方法:

1、通過數組表達式創建數組。

2、通過初始化值創建數組。

無論使用哪種方式,一旦數組被創建,其大小就固定了。

使用表達式創建數組方式如下,該方式指明瞭元素類型、數組的維度、以及至少一個維度的數組的長度。

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

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

使用數組初始化的方式創建數組時需要提供所有的初始值。形式是使用{和}將所有初始值括在一起並用,隔開。

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

注:

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

其實,arr的長度就是3。其實Java中所有的數組,無論幾維,其實都是一維數組。例如arr,分配了3個空間,每個空間存放一個一維數組的地址,這樣就成了“二維”數組。但是對於arr來說,他的長度就是3。

一文帶你深入分析Java中的length和length(),就是這麼簡單

Java中為什麼沒有定義一個類似String一樣Array類

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

Object obj = new int[10];

數組包含所有從Object繼承下來方法,除clone()之外。為什麼沒有一個Array類呢?在Java中沒有Array.java文件。一個簡單的解釋是它被隱藏起來了(注:Java中的數組有點類似於基本數據類型,是一個內建類型,並沒有實際的類與他對應)。

你可以思考這樣一個問題——如果有一個Array類,那它會像什麼樣?它會仍然需要一個數組來存放所有的數組元素,對嗎?因此,定義出一個Array類不是一個好的主意。(注:這裡可能有點繞,道理有點類似於:雞生蛋蛋生雞問題,可能比喻也不是很恰當,請讀者自行理解)

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

一文帶你深入分析Java中的length和length(),就是這麼簡單

輸出:

class [I

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

為什麼String有length()方法?

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

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

"

文章來源:https://mp.weixin.qq.com/s/_O9llQcodBqngbZxrJj9cA

一文帶你深入分析Java中的length和length(),就是這麼簡單

在開始正文之前,請你快速回答如下問題:

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

這個問題我問過不同水平的程序員,包括初級和中級水平的。他們都不能準確而自信地回答這個問題(如果你能很準確很自信的回答這個問題,那麼證明針對這一知識點你比大多數中級程序員掌握的好)。由於現在很多IDE都有代碼補全功能,這使得開發人員在很多問題上都理解的很膚淺。本文將介紹幾個關於Java數組的關鍵概念。

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

一文帶你深入分析Java中的length和length(),就是這麼簡單

那麼問題來了,為什麼數組有length屬性,而字符串沒有?或者,為什麼字符串有length()方法,而數組沒有?

為什麼數組有length屬性?

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

有兩種創建數組的方法:

1、通過數組表達式創建數組。

2、通過初始化值創建數組。

無論使用哪種方式,一旦數組被創建,其大小就固定了。

使用表達式創建數組方式如下,該方式指明瞭元素類型、數組的維度、以及至少一個維度的數組的長度。

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

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

使用數組初始化的方式創建數組時需要提供所有的初始值。形式是使用{和}將所有初始值括在一起並用,隔開。

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

注:

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

其實,arr的長度就是3。其實Java中所有的數組,無論幾維,其實都是一維數組。例如arr,分配了3個空間,每個空間存放一個一維數組的地址,這樣就成了“二維”數組。但是對於arr來說,他的長度就是3。

一文帶你深入分析Java中的length和length(),就是這麼簡單

Java中為什麼沒有定義一個類似String一樣Array類

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

Object obj = new int[10];

數組包含所有從Object繼承下來方法,除clone()之外。為什麼沒有一個Array類呢?在Java中沒有Array.java文件。一個簡單的解釋是它被隱藏起來了(注:Java中的數組有點類似於基本數據類型,是一個內建類型,並沒有實際的類與他對應)。

你可以思考這樣一個問題——如果有一個Array類,那它會像什麼樣?它會仍然需要一個數組來存放所有的數組元素,對嗎?因此,定義出一個Array類不是一個好的主意。(注:這裡可能有點繞,道理有點類似於:雞生蛋蛋生雞問題,可能比喻也不是很恰當,請讀者自行理解)

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

一文帶你深入分析Java中的length和length(),就是這麼簡單

輸出:

class [I

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

為什麼String有length()方法?

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

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

一文帶你深入分析Java中的length和length(),就是這麼簡單

我自己是一名從事了多年開發的java老程序員,辭職目前在做自己的java私人定製課程,今年年初我花了一個月整理了一份最適合2019年學習的java學習乾貨,從最基礎的javase到spring各種框架都有整理,送給每一位java小夥伴,想要獲取的可以關注我的頭條號並在後臺私信我:java,即可免費獲取。

"

相關推薦

推薦中...