我只是想知道,在java中,需要多少内存位置来协调具有相同值的字符串变量。
例如:
String name1 = "Test";
String name2 = "Test";
这会占用2个内存位置,还是只有1个,因为JAVA中的值相等。感谢
答案 0 :(得分:4)
String
文字存储在公共池中。
这有助于共享具有相同内容的字符串的存储空间以节省存储空间。
两者都是一个位置。
答案 1 :(得分:2)
感谢String-intern'ing,所有编译时常量都将进入 String intern pool ,因此,池中只会创建1 "Test"
,这将占用只有1个内存位置。
name1
和name2
都将从池中分配相同的引用。
答案 2 :(得分:1)
这将只占用一个内存位置。
String name1 = "Test";
String name2 = "Test";
原因是name1
和name2
都引用了池间的相同字符串。
如果你有类似的话:
String name1 = "Test";
String name2 = new String("Test");
然后,将创建两个不同的对象。
答案 3 :(得分:1)
只有一个因为一旦你声明了变量name
并将值赋值为“Test”之后如果你分配给不同变量的相同值它将仍然指向相同,除非你明确地创建一个新的字符串对象相同的价值。
答案 4 :(得分:1)
那里只有一个内存位置,name1
和name2
都会引用该位置。
如果您按照以下方式操作,name1
和name2
有两个内存位置
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)
或者,换句话说:
String.subString()
将返回一个新字符串,但这两个字符串共享内部字符数组。