黑马程序员技术交流社区
标题:
一个关于创建对象的问题
[打印本页]
作者:
张峰
时间:
2011-11-29 21:08
标题:
一个关于创建对象的问题
本帖最后由 张峰 于 2011-11-30 13:13 编辑
String s = new String("abc"),这里是创建了2个String Object 为什么是两个?
作者:
刘涛
时间:
2011-11-29 21:28
new这个关键字 ,首先开辟了一个内存空间,
所以就是两个了。
例如 :
MyDate myBirthday;
myBirthday = new MyDate ;
在可以使用变量之前,实际内存必须被分配,
这个工作就是通过new关键字实现的 ,
new 意味着内存的分配和初始化。
作者:
刘旭
时间:
2011-11-29 22:33
当编译时new String("abc")时,jvm先在字符串池中创建字符串“abc”(假如字符串池中还没有字符串“abc”),此为一个字符串对象。然后,再根据这个字符串池中的字符串创建一个新的字符串对象“abc”,此为第二个字符串对象,并将它赋值给给s。
作者:
强子
时间:
2011-11-29 22:37
认为藤椅正解
作者:
xiaolij3s
时间:
2011-11-30 11:13
首先你要理解constant pool, 这是一个特殊的共享区域,literate, Class这些可以在内存中共享的不经常改变的东西,都可以放在这里。
如果你用了String s = new String("abc"); 那么,会有两个String被创建,一个是你的Class被CLassLoader加载时,你的"abc"被作为常量读入,在常量池里创建了一个共享的"abc" 然后,当调用到new String("abc")的时候,会在堆内存里创建这个new String("abc");
作者:
xiaolij3s
时间:
2011-11-30 11:14
首先你要理解常量池, 这是一个特殊的共享区域,literate, Class这些可以在内存中共享的不经常改变的东西,都可以放在这里。
如果你用了String s = new String("abc"); 那么,会有两个String被创建,一个是你的Class被CLassLoader加载时,你的"abc"被作为常量读入,在常量池里创建了一个共享的"abc" 然后,当调用到new String("abc")的时候,会在堆内存里创建这个new String("abc");
作者:
xiaolij3s
时间:
2011-11-30 11:14
首先你要理解常量池, 这是一个特殊的共享区域,literate, Class这些可以在内存中共享的不经常改变的东西,都可以放在这里。
如果你用了String s = new String("abc"); 那么,会有两个String被创建,一个是你的Class被CLassLoader加载时,你的"abc"被作为常量读入,在常量池里创建了一个共享的"abc" 然后,当调用到new String("abc")的时候,会在堆内存里创建这个new String("abc");
作者:
xiaolij3s
时间:
2011-11-30 11:15
首先你要理解常量池, 这是一个特殊的共享区域,literate, Class这些可以在内存中共享的不经常改变的东西,都可以放在这里。
如果你用了String s = new String("abc"); 那么,会有两个String被创建,一个是你的Class被CLassLoader加载时,你的"abc"被作为常量读入,在常量池里创建了一个共享的"abc" 然后,当调用到new String("abc")的时候,会在堆内存里创建这个new String("abc");
作者:
xiaolij3s
时间:
2011-11-30 11:45
首先你要理解常量池, 这是一个特殊的共享区域,literate, Class这些可以在内存中共享的不经常改变的东西,都可以放在这里。
如果你用了String s = new String("abc");
那么,会有两个String被创建,一个是你的Class被CLassLoader加载时,你的"abc"被作为常量读入,在常量池里创建了一个共享的"abc"
然后,当调用到new String("abc")的时候,会在堆内存里创建这个new String("abc");
作者:
wanghongye
时间:
2011-11-30 12:28
如果是String s = "sbc"
先看常量池中有没有"abc" 再创建 将常量放入常量池
而String s=new String("abc");
创建的字符串不是常量 所以是直接放在在堆中
作者:
xiaolij3s
时间:
2011-11-30 12:38
首先你要理解常量池, 这是一个特殊的共享区域,literate, Class这些可以在内存中共享的不经常改变的东西,都可以放在这里。
如果你用了String s = new String("abc");
那么,会有两个String被创建,一个是你的Class被CLassLoader加载时,你的"abc"被作为常量读入,在常量池里创建了一个共享的"abc"
然后,当调用到new String("abc")的时候,会在堆里里创建这个new String("abc");
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2