Java如何獲取數(shù)組和字符串的長度(length還是length())
限時 1 秒鐘給出答案,來來來,聽我口令:“Java 如何獲取數(shù)組和字符串的長度?length 還是 length()?”
在逛 programcreek 的時候,我發(fā)現(xiàn)了上面這個主題。說實話,我當(dāng)時腦海中浮現(xiàn)出了這樣一副驚心動魄的畫面:
面試官老馬坐在我的對面,地中海式的發(fā)型令我敬佩有加。盡管略顯疲憊,但他仍然自信地向我拋出了上面這個問題。稍稍遲疑了一下,我回答說:“數(shù)組用 length,字符串用 length 跟上小括號”。老馬不愧是面試中的高手,一瞬間就從我的回答中捕獲到了不自信。我能感受得出來,因為我看到老馬的嘴角微微地動了一下,似乎想要咂咂嘴。但出于對于我的禮貌,他克制住了。
到底該用 length 還是 length(),說真的,我當(dāng)時真有點吃不準(zhǔn),懷念 IDE 的代碼自動提醒功能?。?/p>
int[] arr = new int[4]; System.out.println(arr.length);// 獲取數(shù)組的長度 String str = "沉默王二"; System.out.println(str.length());// 獲取字符串的長度
按理說,數(shù)組和字符串都是對象,訪問長度都用 length() 方法就好了。為什么數(shù)組偏偏劍走偏鋒用的 length 字段呢?
首先呢,我們必須要明白:數(shù)組是一個容器,當(dāng)它被創(chuàng)建后,不僅元素的類型是確定的,元素的個數(shù)也是確定的。換句話說,數(shù)組的長度是確定的,不可能再變長或者變短。因此,數(shù)組可以使用一個字段(length)來表示長度。
創(chuàng)建數(shù)組的方法有兩種,這個應(yīng)該大家都知道了。一種是通過 new 關(guān)鍵字創(chuàng)建指定長度后再賦值,另外一種是通過 {} 直接進(jìn)行初始化。
// new
int[] arr = new int[4];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
// {}
int [] arr1 = {0, 1, 2, 3};
但不管用哪種方法,數(shù)組的長度是可以明確知道的。并且不會再變長或者變短(學(xué)不了孫悟空的金箍棒)。
由于數(shù)組也是對象,所以以下代碼是合法的。
Object arr2 = new int[4];
這就意味著數(shù)組繼承了超類 java.lang.Object 的所有成員方法和字段。事實上,的確如此,我們可以通過以下代碼來獲取數(shù)組的類型信息 Class。
Object arr2 = new int[4]; System.out.println(arr2.getClass()); Object arr3 = new String[4]; System.out.println(arr3.getClass());
輸出的結(jié)果會是什么呢?
class [I
class [Ljava.lang.String;
class [I 表示一個“int 類型數(shù)組”在運行時的對象類型信息;class [Ljava.lang.String; 表示一個“字符串類型數(shù)組”在運行時的對象類型信息。
那為什么數(shù)組不單獨定義一個類來表示呢?就像字符串 String 類那樣呢?
一個合理的解釋是 Java 將其隱藏了。假如真的存在一個 Array.java,我們也可以假想它真實的樣子,它必須要定義一個容器來存放數(shù)組的元素,就像 String 類那樣。
public final class String
  implements java.io.Serializable, Comparable<String>, CharSequence {
  /** The value is used for character storage. */
  private final char value[];
}
 
但這樣做真的有必要嗎?為數(shù)組單獨定義一個類,是不是有點畫蛇添足的意味。那既然數(shù)組沒必要定義成一個類,也就沒有必要再定義一個 length() 方法來獲取數(shù)組的長度了,直接用 length 這個字段就可以了,不是嗎?
那為什么字符串 String 類會有 length() 方法呢?來看一下源碼就明白了。
  /**
   * Returns the length of this string.
   * The length is equal to the number of Unicode
   * code units in the string.
   */
  public int length() {
    return value.length;
  }
length() 方法返回的正是字符數(shù)組 value 的長度(length),value 本身是 private 的,因此很有必要為 String 類提供一個 public 級別的方法來供外部訪問字符的長度。
總結(jié)一下,Java 獲取數(shù)組長度的時候用 length,獲取字符串長度的時候用的是 length(),他們之間的區(qū)別我相信大家已經(jīng)搞清楚了。
最后提醒一點:萬丈高樓平地起。一棟樓能蓋多高,一座大橋能造多長,重要的是它們的地基。同樣對于我們技術(shù)人員來說,基礎(chǔ)知識越扎實,走得就會越遠(yuǎn)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
欄 目:Java
本文標(biāo)題:Java如何獲取數(shù)組和字符串的長度(length還是length())
本文地址:http://www.jygsgssxh.com/a1/Java/8825.html
您可能感興趣的文章
- 01-10Java實現(xiàn)動態(tài)模擬時鐘
 - 01-10利用Java實現(xiàn)復(fù)制Excel工作表功能
 - 01-10JavaWeb實現(xiàn)郵件發(fā)送功能
 - 01-10java基于poi導(dǎo)出excel透視表代碼實例
 - 01-10Java實現(xiàn)動態(tài)數(shù)字時鐘
 - 01-10基于Java驗證jwt token代碼實例
 - 01-10java實現(xiàn)液晶數(shù)字字體顯示當(dāng)前時間
 - 01-10淺談Java中真的只有值傳遞么
 - 01-10Java動態(tài)顯示當(dāng)前日期和時間
 - 01-10如何解決線程太多導(dǎo)致java socket連接池出現(xiàn)的問題
 


閱讀排行
本欄相關(guān)
- 01-10Java實現(xiàn)動態(tài)模擬時鐘
 - 01-10Springboot中@Value的使用詳解
 - 01-10JavaWeb實現(xiàn)郵件發(fā)送功能
 - 01-10利用Java實現(xiàn)復(fù)制Excel工作表功能
 - 01-10Java實現(xiàn)動態(tài)數(shù)字時鐘
 - 01-10java基于poi導(dǎo)出excel透視表代碼實例
 - 01-10java實現(xiàn)液晶數(shù)字字體顯示當(dāng)前時間
 - 01-10基于Java驗證jwt token代碼實例
 - 01-10Java動態(tài)顯示當(dāng)前日期和時間
 - 01-10淺談Java中真的只有值傳遞么
 
隨機(jī)閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 04-02jquery與jsp,用jquery
 - 01-10使用C語言求解撲克牌的順子及n個骰子
 - 01-11ajax實現(xiàn)頁面的局部加載
 - 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 01-10C#中split用法實例總結(jié)
 - 01-10delphi制作wav文件的方法
 


