如何在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