如何为字符串分配内存?

时间:2012-07-10 15:18:12

标签: java c++ string memory-management

如何为字符串分配内存,比如Java或C ++?这可能很傻,所以请原谅。我想知道因为字符串的大小未知。

6 个答案:

答案 0 :(得分:4)

Java字符串是不可变对象。在每次创建String时,都会在char []内存中分配字符串中的字符数。如果你对该String进行任何操作,它将是全新的对象,并且字符长度将完成内存分配。

答案 1 :(得分:4)

在Java中,String是一个不可变的对象,因此String 的“大小”在分配时是已知的。如果它是“静态”(例如String litteral,如"Hey, I'm a String litteral!"),它将最终分配到共享对象池中,如果它是使用new String(...)构造的,则最终分配在堆上。

答案 2 :(得分:1)

在内部,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;
            ...

答案 3 :(得分:0)

它像向量一样动态分配。当它变得太大时,它会通过内部方法(C ++)自动调整大小。在Java中,正如thinksteep已经提到的,字符串是不可变的。

答案 4 :(得分:0)

您将可变大小未知大小混淆。任何语言的具体字符串总是具有已知大小,只是字符串的每个实例可能具有不同的大小。语言如何处理变量长度可能非常不同,并且是特定于实现的。

答案 5 :(得分:0)

只是添加到以前的答案 在Java中,字符串可以通过两种方式分配,具体取决于字符串的创建方式。例如,如果使用String s = "some string";创建字符串,JVM会将此字符串放在所谓的文字池中(从内存出现问题时留下的内容)如果使用String s = new String("some string");创建字符串,JVM会将其放在堆上...... 唯一不同的是你可以使用operator ==来比较字符串,如果它们都在文字池中,但是从不推荐这个。

问候