黑马程序员技术交流社区
标题:
有一个问题没搞懂,求大神指点!!!!!
[打印本页]
作者:
耿明明
时间:
2013-6-9 12:58
标题:
有一个问题没搞懂,求大神指点!!!!!
public class ItheimaScore1 {
/*下面创建的String类型的数组,在堆内存中开辟一个空间,里面存放的是内存地址,
* 分别存放的是常量池中的 "itheima","hello java","hello word"的内存地址.
*
* 那么,我想问的是创建的int类型的数组,也会在堆内存中开辟一个空间,里面存放的
* 是 1 2 3 , 还是 常量池中的 1 2 3 的地址.
*
*/
String[] str = new String[]{"itheima","hello java","hello word"};
int[] arr = new int[]{1,2,3};
}
作者:
孙金鑫
时间:
2013-6-9 14:07
你所说的1,2,3,是常量池的地址,这里用的是享元模式,它的取值范围是 -128——127之间
作者:
袁梦希
时间:
2013-6-9 14:44
楼主你好 如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
作者:
刘海陆
时间:
2013-6-9 14:51
如果数组中存放的不是1,2,3 而是超出了 byte 的范围,那么 还是指向常量池吗?
作者:
耿明明
时间:
2013-6-9 14:56
刘海陆 发表于 2013-6-9 14:51
如果数组中存放的不是1,2,3 而是超出了 byte 的范围,那么 还是指向常量池吗?
同问!!!!
作者:
麦子
时间:
2013-6-12 11:06
*下面创建的String类型的数组,在堆内存中开辟一个空间,里面存放的是内存地址,
* 分别存放的是常量池中的 "itheima","hello java","hello word"的内存地址.
*
* 那么,我想问的是创建的int类型的数组,也会在堆内存中开辟一个空间,里面存放的
* 是 1 2 3 , 还是 常量池中的 1 2 3 的地址.
从你说的问题就可以知道你对数组没有进行深入的了解,你前面的一句话就已经暗含了这个原理
,可是你没有悟到。
给你讲讲数据结构的知识:数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。
这些按序排列的同类数据元素的集合称为数组。这是从逻辑层面来研究的
那么在计算机中我们怎么去存储它呢?专家们就打成了一个统一的认识
数组在内存中开辟的空间也是连续的且元素之间的先后顺序与其逻辑相对位置一致。
那么我们只需要知道首个元素在内存中首地址就可以访问到数组中的每个元素了,
当你定义一个类型的数组时,比如int型,每个int型数据就占用4个字节,而4字节需占用32个二进制位。
这样我们就可以通过数组第一个元素的首地址+该元素与第一个元素之间间隔的元素个数*4字节 得到该元素的物理地址
然后从内存中取中元素类型占用长度的数据便得到该元素的值了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2