首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 長度獲取三大API辨析:length、length() 與 size()

     編輯:Java 綜合教學

一眼看懂 Java 中 length、length() 與 size() 的本質區別

這是 Java 面試高頻考點,也是新手易混淆的基礎知識。本質上反映了三種不同數據結構的長度獲取方式。

核心對比表

API類型適用對象本質示例
length屬性 (field)數組JVM 內部記錄的數組長度,O(1) 直接讀取int[] arr = new int[3]; arr.length // 3
length()方法 (method)String、StringBuilder、StringBuffer、CharSequence 實現類字符序列邏輯長度(字符數),O(1) 返回內部 count 字段"Hello".length() // 5
size()方法 (method)Collection、Map、List、Set 等集合框架類容器中元素個數,通常 O(1) 返回內部 size 字段new ArrayList<>().size() // 0

代碼速查

// 1. 數組 - 屬性
int[] arr = {1, 2, 3};
int lenArr = arr.length; // 3

// 2. 字符串 - 方法
String str = "Hello World Java";
int lenStr = str.length(); // 16 (含空格)

// 3. 集合 - 方法
Collection<String> col = new ArrayList<>();
col.add("Hello"); col.add("World"); col.add("Java");
int sizeCol = col.size(); // 3

// Map 同理
Map<String, Integer> map = new HashMap<>();
map.put("a", 1); map.put("b", 2);
int mapSize = map.size(); // 2

底層原理速覽

  • 數組:JVM 在堆中分配連續內存,對象頭記錄長度,length 直接讀取對象頭字段,無方法調用開銷。
  • String:內部 private final char[] value (JDK 8) 或 byte[] value (JDK 9+),length() 返回 value.length (JDK 8) 或根據編碼計算字符數 (JDK 9+ compact strings)。
  • 集合:AbstractCollection 定義 size() 為抽象方法,各實現類 (ArrayList, HashMap 等) 維護 size 字段,增刪操作同步更新,size() 直接返回。

常見誤區避坑指南

  1. 別寫 arr.length():數組無方法,編譯報錯
  2. 別寫 str.length:String 無公共 length 屬性,編譯報錯
  3. 別寫 list.length 或 map.length():集合框架統一用 size()
  4. StringBuilder/StringBuffer 也用 length():實現 CharSequence 接口

記住口訣:數組看屬性,字符串看方法,集合看 size(),一行代碼寫對不出錯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved