日期:2014-05-20  浏览次数:20633 次

一个被问过千变万变的基础问题!但每次都有不同答案!
String   s=new   String( "aaaaaaaaaaaaaaaaa ");
创建了几个String   Object?哪几个?

只说数字的就别留言了!
分就这么多。这问题在CSDN上有N多答案!郁闷   ,越看越糊涂

------解决方案--------------------
http://community.csdn.net/Expert/topic/4802/4802083.xml?temp=.2654993
------解决方案--------------------
个人认为
只1个对象,使用new String( " ")只能建立一个对象.
只大虾斧正.
------解决方案--------------------
2
------解决方案--------------------
2个
String s是一个对象
new String( "aaaaaaaaaaaaaaaaa ");是一个对象
String s=new String( "aaaaaaaaaaaaaaaaa ");是把对象二赋值给对象1

------解决方案--------------------
一个是 "aaaaaaaaaaaaa ",
另外一个是new出来的,这个new出来的被s引用。
------解决方案--------------------
1个 new String( "aaaaaaaaaaaaaaaaa ");
2个 String s指向( "aaaaaaaaaaaaaaaaa ");的

我的理解
------解决方案--------------------
两个对象,一个变量。
一个对象是String类型的字符串常量 "aaaaaaaaaaaaaaaaa ",放在常量池中
一个对象是new String生成的对象,存储于heap中,对象的内容是上面生成的字符串常量
还有一个变量是s,是引用,存储于栈中,指向heap中new String生成的对象
------解决方案--------------------
两个对象被,一个是存放在栈内存中的基本数据aaaaaaa,一个在存放在堆内存中它的引用对象,这不是java必问32道题中的一道吗?!
------解决方案--------------------
String s=new String( "aaaaaaaaaaaaaaaaa ");
两个:
"aaaaaaaaaaaaaaaaa "显然是对象,而构造函数根据传进的参数又构造了一个对象.
这个可以说是java的API的一个bug,因为String是个不可变类,完全没有必要提供这样的一个构造函数.effective java里有说到.
------解决方案--------------------
我个人的意见:
先说这个“new”。因为String是java.lang.Object类型,所以,生成String对象是能用“new”关键字。用new的时候,JVM在“堆”里面分配了一块内存用于存储“aaaaaaaaa”,这就是一个对象了。然后是“String s”,这里创建的其实就只有一个String对象指针而已(忘记是占几个B了),不过现在是none值。那么“=”呢,唯一的作用是把那个String对象的地址填到s里,所以以后才能用“s”来引用“aaaaaaaa”。所以,创建了一个String对象,同时还包含一个对象指针,但是指针似乎不算对象。
------解决方案--------------------
我没那么多话说。
就一句:2个。
------解决方案--------------------
1.
class Test
{
public static void main(String[] args)
{
String s = "123 ";
}
}


Runtime Heap Summary: Test
==========================

Runtime Instance List
---------------------

Package Class Count Cumulative Count Memory Cumulative Memory
------- ----- ----- ---------------- ------ -----------------
Total 2 (100.0%) 2 (100.0%) 48 (100.0%) 48 (100.0%)
java.lang String 1 (50.0%) 1 (50.0%) 24 (50.0%) 24 (50.0%)
char[ ] 1 (50.0%) 1 (50.0%) 24 (50.0%) 24 (50.0%)


Report Date: 2007-4-26 15:27:49
结论:String s = "123 ",会创建一个 "123 "字符数组和一个String对象。

2.
class Test
{
public static void main(String[] args)
{
String s = new String( "123 ");
}
}


Runtime Heap Summary: Test
==========================

Runtime Instance List
---------------------

Package Class Count Cumulative Count Memory Cumulative Memory