锁定老帖子 主题:今天面试一个五年经验求职者,惹了一肚子气!
精华帖 (2) :: 良好帖 (0) :: 隐藏帖 (5)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-09
leonayx123 写道 meichen8050753 写道 backshadow 写道 String str = "abc";
请问这样创建了几个字符串对象? 下次我答一个也没有好了 1、栈上的str能算对象吗? 2、"abc"早在常量池里放着了 为什么总能听到‘常量池’。。 java存储数据只有5个地方:寄存器,堆栈,堆,常量存储,非RAM存储。 哪来的常量池? 常量是在编译期确定下来的,也就是说常量会直接写到class文件里。 然后供虚拟机加载到内存。 虚拟机加载后,为每个被装载的类型维护一个常量池。java存储数据的地方有:堆,栈,方法区,本地方法区。没有寄存器,只有一个程序计数器来装载下一条指令。你说的这是c++的吧。。 既然是为被装载类型维护的常量池,那么肯定是在方法区里开辟的空间。 我没有资料,是自己思考出来的,供参考。 你说的是静态常量,也就是常量存储,和上面说的不是一个意思 |
|
返回顶楼 | |
发表时间:2012-05-09
最后修改:2012-05-09
meichen8050753 写道 leonayx123 写道 meichen8050753 写道 backshadow 写道 String str = "abc";
请问这样创建了几个字符串对象? 下次我答一个也没有好了 1、栈上的str能算对象吗? 2、"abc"早在常量池里放着了 为什么总能听到‘常量池’。。 java存储数据只有5个地方:寄存器,堆栈,堆,常量存储,非RAM存储。 哪来的常量池? 常量是在编译期确定下来的,也就是说常量会直接写到class文件里。 然后供虚拟机加载到内存。 虚拟机加载后,为每个被装载的类型维护一个常量池。java存储数据的地方有:堆,栈,方法区,本地方法区。没有寄存器,只有一个程序计数器来装载下一条指令。你说的这是c++的吧。。 既然是为被装载类型维护的常量池,那么肯定是在方法区里开辟的空间。 我没有资料,是自己思考出来的,供参考。 你说的是静态常量,也就是常量存储,和上面说的不是一个意思 对于字符串对象是一样的啊。字符串如果你不是new String分配的空间。他就会在编译期确定下来。然后放在常量池。即使他是非 static,非final也一样。因为String的处理比较特殊,再下一次引用解析的时候,会去检索常量池是否有同值数据,有的话把符号引用指向。 你自己去搜资料吧。不想跟你争辩。 我很确信。 在补充一下,“常量池在方法区”这是我的猜想。这点我也不确信。印象中好像也记得在那里看过是在栈中。 没细纠过。其实它也就是在原生的存储空间里,单独再维护的一个空间而已。是栈或者方法区上的一个实现。 你不能以 只有 堆、栈、方法区就否定了它的存在。就好像jvm为每一个对象都关联了一个锁信息的空间道理是一样的 百度了个例子,你自己看吧 http://wenku.baidu.com/view/4a2f961c59eef8c75fbfb348.html |
|
返回顶楼 | |
发表时间:2012-05-09
你看清楚我说了不?
Java中的对象引用和基本型变量的值都是存在栈中的。String s = "ss" 它的值也是存在栈中的。。 在创建一个String a = "xxx"时,会去检索《栈》中是否有相等于 字符串 a 的值。 栈就是栈。其中没有什么常量池。 |
|
返回顶楼 | |
发表时间:2012-05-09
最后修改:2012-05-09
我还见过一个毛都不懂的人,在一个公司当CTO呢,都见怪不怪了
|
|
返回顶楼 | |
发表时间:2012-05-09
最后修改:2012-05-09
meichen8050753 写道 你看清楚我说了不?
Java中的对象引用和基本型变量的值都是存在栈中的。String s = "ss" 它的值也是存在栈中的。。 在创建一个String a = "xxx"时,会去检索《栈》中是否有相等于 字符串 a 的值。 栈就是栈。其中没有什么常量池。 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。 我就书上看到这么一个概念,我还真没看清楚你什么了。你看清楚我标红的了? 你愿意按你的理解觉得这个名词不需要,直接说是栈那随你。 我学习的书有这个名词,我就按这么理解。 这话题打住。 |
|
返回顶楼 | |
发表时间:2012-05-09
不说了,你就根本没有理解我的意思。
|
|
返回顶楼 | |
发表时间:2012-05-09
最后修改:2012-05-09
meichen8050753 写道 不说了,你就根本没有理解我的意思。
唉,你就是想说没有常量池这一个物理空间,它本质就是栈么。 我的意思是说,这个名词存在肯定是合理的。他有那么一个逻辑的空间 叫做常量池,至于放在栈里还是方法区里我不确定。你不能否定它的存在。 |
|
返回顶楼 | |
发表时间:2012-05-09
最后修改:2012-05-09
我知道常量储存(常量池) 的作用。
|
|
返回顶楼 | |
发表时间:2012-05-09
谁告诉你们string literal存储在stack中的.
String literal存储在"permgen" heap中. stack怎么可能有pool...... |
|
返回顶楼 | |
发表时间:2012-05-09
当然,permgen不被sun叫做heap.
|
|
返回顶楼 | |