爲什麼java中的String類有char[] value
,int offset
和int count
字段。他們的目的是什麼?他們完成什麼任務?爲什麼在java中使用char [],偏移量和長度實現的String類?
-1
A
回答
3
char[]
數組包含組成該字符串的字符數組。
偏移量和計數用於String.substring()
操作。當你得到一個字符串的子串時,結果String
引用原始字符數組,但是存儲相關的偏移量和長度(這被稱爲flyweight pattern,並且是節省存儲器的常用技術)
例如, String.substring("ABCDEF", 1, 2);
將引用原始陣列的A,B,C,D,E,F
但設置offset
1和length
至1(因爲substring
方法使用開始和結束索引)。請注意,你可以這麼做,因爲字符數組是不可變的。你不能改變它。
注意:這已經改變最近(我相信7u6),並且在最近的版本中不再是真的。我懷疑這是由於認識到這個優化並沒有太多用處。
0
它們允許來回傳遞一個數組作爲主要對數組的一部分感興趣的例程的支持。這使得人們不必擔心構建大量的小陣列,從而避免了與特定操作的對象構建相關的成本。例如,可以使用數組作爲輸入緩衝區,但需要額外的數組來處理該緩衝區內的分塊字符,使用數組,偏移量和計數的三元參數,可以「模擬」讀取從緩衝區中間不需要創建一個新的(二級)數組。
這很重要,因爲儘管您可能合理地想要一個數組(一個java中的對象)來容納輸入字符,但您可能不希望分配和垃圾回收數千個數組(並將字符複製到它們中)將數據傳遞到只需要單個單詞的內容,由空格分隔(嘿,這只是一個例子)。
相關問題
- 1. 爲什麼String類在便攜庫中實現IEnumerable <char>?
- 2. 爲什麼使用char []而不是String?
- 3. Java實現Map <String,String>類和迭代器的使用
- 4. 爲什麼不在String中使用Java?
- 5. 使用偏移量和長度拆分PDF - IBM ONDEMAND(組合PDF)
- 6. 爲什麼fgetpos()返回負偏移量?
- 7. 爲什麼pytz偏移量不正確?
- 8. 爲什麼RandomAccessFile使用int作爲偏移量
- 9. 使用jQuery和偏移量
- 10. JAVA數據報包長度或偏移量錯誤
- 11. 在java中8,爲什麼不能調用當前類實現
- 12. 爲什麼偏移和限制
- 13. 寫一個固定長度的緩衝區與偏移量
- 14. 查找和使用現有程序中的內存偏移量?
- 15. 爲什麼jQuery偏移量()在IE中使用基於表格的佈局?
- 16. 什麼是溫度和什麼是在Java中使用溫度?
- 17. 爲什麼Joda Time報告時區錯誤的偏移量,而Android Java Api返回正確的偏移量?
- 18. 實現邊框ComponentResizer偏移
- 19. 爲什麼在java中使用常量?
- 20. 爲什麼不粘貼?使用變量和偏移單元格引用
- 21. VBA變量和偏移量
- 22. mplot3d:contourf偏移量,限制和刻度
- 23. mysql偏移量的真實行爲
- 24. 長度和長度()在Java
- 25. 「長度和長度」與Python中的「長度」有什麼不同?
- 26. 在Java中將int的2d數組轉換爲char和string
- 27. Java爲什麼char = char^char與char^= char不同?
- 28. Java Char數組的用途是什麼?
- 29. 爲什麼Java的`String.toCharArray()`和`new String(char [])`方法不接受字符集編碼?
- 30. 在C中使用指針偏移量#
因爲*是*。 – moonwave99 2013-03-12 18:05:54
是S.O.你的研究的一部分?你是否在別處搜索過,無法提出可行的答案? – Zak 2013-03-12 18:06:54
我認爲這是一個不無道理的問題 – 2013-03-12 18:08:29