A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 耿明明 中级黑马   /  2013-6-9 12:58  /  1502 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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};
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
你所说的1,2,3,是常量池的地址,这里用的是享元模式,它的取值范围是 -128——127之间

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
回复 使用道具 举报
如果数组中存放的不是1,2,3 而是超出了 byte 的范围,那么 还是指向常量池吗?
回复 使用道具 举报
刘海陆 发表于 2013-6-9 14:51
如果数组中存放的不是1,2,3 而是超出了 byte 的范围,那么 还是指向常量池吗?

同问!!!!
回复 使用道具 举报
*下面创建的String类型的数组,在堆内存中开辟一个空间,里面存放的是内存地址,
* 分别存放的是常量池中的 "itheima","hello java","hello word"的内存地址.
*
* 那么,我想问的是创建的int类型的数组,也会在堆内存中开辟一个空间,里面存放的
* 是 1  2  3  , 还是  常量池中的 1  2  3 的地址.

从你说的问题就可以知道你对数组没有进行深入的了解,你前面的一句话就已经暗含了这个原理
,可是你没有悟到。
给你讲讲数据结构的知识:数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。
这些按序排列的同类数据元素的集合称为数组。这是从逻辑层面来研究的
那么在计算机中我们怎么去存储它呢?专家们就打成了一个统一的认识
数组在内存中开辟的空间也是连续的且元素之间的先后顺序与其逻辑相对位置一致。
那么我们只需要知道首个元素在内存中首地址就可以访问到数组中的每个元素了,
当你定义一个类型的数组时,比如int型,每个int型数据就占用4个字节,而4字节需占用32个二进制位。
这样我们就可以通过数组第一个元素的首地址+该元素与第一个元素之间间隔的元素个数*4字节  得到该元素的物理地址
然后从内存中取中元素类型占用长度的数据便得到该元素的值了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马