如何在Java或C++中爲字符串分配內存?這可能很愚蠢,所以請原諒。我想知道,因爲一個字符串是未知的大小。如何爲字符串分配內存?
回答
在Java中,String
是一個不可變的對象,所以在分配的時候知道 的「大小」爲。如果它是「靜態的」,它將最終分配到一個共享的對象池中(例如 litteralteral,如"Hey, I'm a String litteral!"
),或者如果它使用new String(...)
構建,則會在堆上分配。
Java字符串是不可變的對象。在每次創建一個字符串時,都會有一個字符串中分配了多少個字符的char []內存。如果你對該字符串進行任何操作,它將成爲全新的對象,並且字符的長度將完成內存分配。
它像一個向量一樣動態分配。當它變得太大時,它會通過內部方法(C++)自動調整大小。在Java中,正如thinksteep已經提到的那樣,字符串是不可變的。
在內部,java String
只不過是一個已知長度的char數組。下面是String類成員:
110 public final class String
111 implements java.io.Serializable, Comparable<String>, CharSequence
112 {
113 /** The value is used for character storage. */
114 private final char value[];
115
116 /** The offset is the first index of the storage that is used. */
117 private final int offset;
118
119 /** The count is the number of characters in the String. */
120 private final int count;
121
122 /** Cache the hash code for the string */
123 private int hash; // Default to 0
124
125 /** use serialVersionUID from JDK 1.0.2 for interoperability */
126 private static final long serialVersionUID = -6849794470754667710L;
...
你混淆可變大小與未知大小。任何語言的具體字符串總是已知的大小,只是每個字符串的實例可能具有不同的大小。語言如何處理可變長度可能會非常不同,並且是特定於實現的。
是的,我混淆了變量尺寸未知的尺寸。請原諒我的無知。這種無知導致了一些混亂。我的確意味着可變尺寸,而不是未知尺寸。 – user1210233 2012-07-10 16:15:59
只是添加到以前的答案。
在Java中,根據字符串的創建方式,可以通過兩種方式分配Java字符串。例如,如果字符串是用String s = "some string";
創建的,JVM會把這個字符串放在所謂的文字池(當內存出現問題時留下的東西),如果你創建字符串與String s = new String("some string");
JVM將把它放在堆上...
只有顯着差異是你可以使用operator ==來比較字符串,如果它們都在文字池中,但這是從不建議的。
問候
- 1. 字符串內存分配
- 2. 爲字符串動態內存分配
- 3. 如何爲只讀字符串重新分配內存?
- 4. JVM如何爲靜態字符串變量分配內存?
- 5. 如何動態地爲字符串分配內存?
- 6. 字符串數組的分配內存
- 7. 分配內存到字符串數組
- 8. C字符串內存分配隱式?
- 9. Python何時爲相同的字符串分配新內存?
- 10. 爲結構內部的字符串分配內存
- 11. 字符串內存分配和字符串池概念
- 12. 爲本地字符串文字分配內存嗎?
- 13. 如何在Linux內核中爲char *類型的字符串分配內存?
- 14. 字符內存分配
- 15. 如何分配字符串?
- 16. 字符串如何在C++中分配內存?
- 17. Java中的字符串如何分配內存?
- 18. @「字符串」是如何在內存中分配的?
- 19. 在C++中爲字符串分配內存
- 20. 爲兩個級聯字符串分配內存
- 21. 爲多維字符串動態分配內存
- 22. C++/CLI:爲字符串句柄預分配內存
- 23. 將字符串轉換爲char時的內存分配錯誤*
- 24. C++字符串流爲char *轉換內存分配
- 25. 使用malloc爲字符串分配內存(C++源)
- 26. 爲鏈表節點中的字符串動態分配內存
- 27. C,爲結構數組中的字符串分配內存
- 28. 讀取字符串的字符時出錯。分配內存
- 29. 爲內存分配字符串的時間和內存有效的方法
- 30. 如何動態地爲C中的字符串數組分配內存?
http://www.javamex.com/tutorials/memory/string_memory_usage.shtml – hovanessyan 2012-07-10 15:20:38
「的字符串是未知大小的」:沒有在Java中。 – assylias 2012-07-10 15:21:16
字符串實際上永遠不會是未知大小,無論它是否是不可變的。 – 2012-07-10 15:23:22