内存分配
答
这两个变量将分别占用引用所需的空间。
两个引用都具有相同的值 - 也就是说,他们会引用同一个对象 - 由于字符串文字的内联。换句话说,只会有一个String对象。然而,很多时候你执行这段代码(至少在同一个类加载器中),x
和y
的值将始终指向相同的单个对象。
两个变量仍是独立的,当然 - 你可以改变一个,而不改变其他:
String x = "abc";
String y = "abc";
x = "def";
System.out.println(y); // Still prints abc
答
只有一个字符串,它被放置在字符串文字池。不管你多少次运行这两行,例如在一个循环中,不会分配更多的对象。
编辑:如果你想创建更多的对象,你可以做到这一点。
String x = new String("abc"); // don't do this
String y = new String("xyz"); // don't do this either.
这会每次创建一个对象,因为您已经告诉它。 ;)
答
这是关于Java中字符串文字的nice reference。我猜你有兴趣在此报价:
如果使用的是常量 表达式,一个字符串文字, 参考现有字符串,或通过 明确使用
intern()
创建具有相同数据String
对象方法, 他们的引用将是相同的。
答
String x =“abc”;它会创建一个字符串对象和一个引用变量。 “abc”将进入池中,x将引用它。
你是什么意思“什么是内存分配”?另外,这功课呢?你一直在问一系列与iPhone有关的问题,所以看到一个Java问题突然变得非常令人惊讶。 – BoltClock 2011-02-11 17:17:22
“内存分配”是什么意思? – Argote 2011-02-11 17:17:44
我认为OP在询问字符串“abc”是否会被拦截。 – Juliet 2011-02-11 17:18:15