2011-02-11 96 views
2

如果内存分配

String x = "abc"; 
String y = "abc"; 

什么是X和Y的内存分配?

+1

你是什么意思“什么是内存分配”?另外,这功课呢?你一直在问一系列与iPhone有关的问题,所以看到一个Java问题突然变得非常令人惊讶。 – BoltClock 2011-02-11 17:17:22

+0

“内存分配”是什么意思? – Argote 2011-02-11 17:17:44

+0

我认为OP在询问字符串“abc”是否会被拦截。 – Juliet 2011-02-11 17:18:15

回答

7

这两个变量将分别占用引用所需的空间。

两个引用都具有相同的值 - 也就是说,他们会引用同一个对象 - 由于字符串文字的内联。换句话说,只会有一个String对象。然而,很多时候你执行这段代码(至少在同一个类加载器中),xy的值将始终指向相同的单个对象。

两个变量仍是独立的,当然 - 你可以改变一个,而不改变其他:

String x = "abc"; 
String y = "abc"; 
x = "def"; 
System.out.println(y); // Still prints abc 
1

只有一个字符串,它被放置在字符串文字池。不管你多少次运行这两行,例如在一个循环中,不会分配更多的对象。

编辑:如果你想创建更多的对象,你可以做到这一点。

String x = new String("abc"); // don't do this 
String y = new String("xyz"); // don't do this either. 

这会每次创建一个对象,因为您已经告诉它。 ;)

1

这是关于Java中字符串文字的nice reference。我猜你有兴趣在此报价:

如果使用的是常量 表达式,一个字符串文字, 参考现有字符串,或通过 明确使用intern()创建具有相同数据 String对象方法, 他们的引用将是相同的。

0

String x =“abc”;它会创建一个字符串对象和一个引用变量。 “abc”将进入池中,x将引用它。