需要多少个内存位置?

时间:2013-11-25 10:25:17

标签: java

我只是想知道,在java中,需要多少内存位置来协调具有相同值的字符串变量。

例如:

String name1 = "Test";
String name2 = "Test";

这会占用2个内存位置,还是只有1个,因为JAVA中的值相等。感谢

6 个答案:

答案 0 :(得分:4)

String文字存储在公共池中。

这有助于共享具有相同内容的字符串的存储空间以节省存储空间。

两者都是一个位置。

答案 1 :(得分:2)

感谢String-intern'ing,所有编译时常量都将进入 String intern pool ,因此,池中只会创建1 "Test",这将占用只有1个内存位置。

name1name2都将从池中分配相同的引用。

答案 2 :(得分:1)

这将只占用一个内存位置。

String name1 = "Test";
String name2 = "Test";

原因是name1name2都引用了池间的相同字符串。

如果你有类似的话:

String name1 = "Test";
String name2 = new String("Test");

然后,将创建两个不同的对象。

答案 3 :(得分:1)

只有一个因为一旦你声明了变量name并将值赋值为“Test”之后如果你分配给不同变量的相同值它将仍然指向相同,除非你明确地创建一个新的字符串对象相同的价值。

答案 4 :(得分:1)

那里只有一个内存位置,name1name2都会引用该位置。

如果您按照以下方式操作,name1name2有两个内存位置

    String name1 = new String("Test");
    String name2 = new String("Test");

答案 5 :(得分:1)

  

这是一篇关于JVM中的String用法的文章:Memory usage of Java Strings and string-related objects

如何计算字符串内存使用量

由于我们将在下面探讨的原因,Java String(在Hotspot Java 6 VM中)的最小内存使用量通常如下:

Minimum String memory usage (bytes) = 8 * (int) ((((no chars) * 2) + 45) / 8)

或者,换句话说:

  • 将字符串的字符数乘以2;
  • 添加38;
  • 如果结果不是8的倍数,
  • 四舍五入到8的下一个倍数;
  • 结果通常是字符串在堆上占用的最小字节数。

  • 如果字符串在PermGen中,那么字符串将只占用一个空格。
  • 如果没有,两个String将占用两倍的空间。
  • 此外,String.subString()将返回一个新字符串,但这两个字符串共享内部字符数组。