黑马程序员技术交流社区

标题: 我是菜鸟,求大神指点 [打印本页]

作者: wuwenwen3779    时间: 2015-6-26 22:08
标题: 我是菜鸟,求大神指点
class Array1
{
public static void main(String[] args)
{
  int[][] arr={{1,2},{3},{4},{5}};
  System.out.println(arr);
  System.out.println(arr[0]);
}
}
问一下这段代码,为什么输出的两个地址不一样,明明记得大学上课的时候学过它是个一样的呀


作者: 小骆驼    时间: 2015-6-26 23:57
本帖最后由 小骆驼 于 2015-6-27 00:17 编辑

System.out.println(arr);打印的是这个二维数组的地址值,而System.out.println(arr[0]);打印的是二维数组中的第一个一维数组的地址值,所以打印的不一样打个比方,把一栋办公楼看成 一个二维数组,而不同楼层就是相应的二维数组里的一维数组,每个楼层的房间号就是一维数组的角标.
你要是找这栋楼,也就是找这个楼的地址,比如是中心大街009号,但是这栋楼二层的地址是办公楼 二层.你看两个地址值不一样吧.数组也是这个道理.
好像毕老师视频里有讲这个,举例差不多,你可以看看

作者: 小龙编程世界    时间: 2015-6-27 10:19
arr是地址值啊,相当于0X0011那种,arr[0]就是打印数组第一个元素值
作者: Diors    时间: 2015-6-27 10:23
二楼说的对,估计你大学上课时打瞌睡了
作者: 帅帅loyal    时间: 2015-6-27 10:32
一个是二维数组的地址值,一个是二维数组中一维数组的地址值,就像二楼同学说的一样,一个只有楼层号,一个是要楼层号中的房间号
作者: keto    时间: 2015-6-27 11:15
2楼解释的很明白。
作者: fanxin_meng    时间: 2015-6-27 11:20
小骆驼 发表于 2015-6-26 23:57
System.out.println(arr);打印的是这个二维数组的地址值,而System.out.println(arr[0]);打印的是二维数组中 ...

正解,赞一个
作者: 改变    时间: 2015-6-27 14:31
学习了!
作者: wuwenwen3779    时间: 2015-6-27 21:11
Diors 发表于 2015-6-27 10:23
二楼说的对,估计你大学上课时打瞌睡了

我真的记得大学的时候跟这说的不一样:'(,我好像真的错了
作者: 鲤鱼仙    时间: 2015-6-27 21:32
arr  代表的是这个二维数组的 地址值
而arr[0]代表的是这个二维数组里面第一个一位数组的地址值
求大神 看看是我说的这样吗
作者: zlpiano    时间: 2015-6-27 22:24
arr是二维数组引用,arr[0]是一维数组引用,都是地址值,但是不相同
作者: wuwenwen3779    时间: 2015-6-30 23:25
小龙编程世界 发表于 2015-6-27 10:19
arr是地址值啊,相当于0X0011那种,arr[0]就是打印数组第一个元素值

第一句话是对的,arr【0】是一维数组首地址
作者: wuwenwen3779    时间: 2015-6-30 23:26
改变 发表于 2015-6-27 14:31
学习了!

是吧,不太好搞哦
作者: wuwenwen3779    时间: 2015-6-30 23:27
zlpiano 发表于 2015-6-27 22:24
arr是二维数组引用,arr[0]是一维数组引用,都是地址值,但是不相同

你说的对!!!!!!
作者: wuwenwen3779    时间: 2015-6-30 23:28
鲤鱼仙 发表于 2015-6-27 21:32
arr  代表的是这个二维数组的 地址值
而arr[0]代表的是这个二维数组里面第一个一位数组的地址值
求大神  ...

根据别人的回帖,目前来看是这样的
作者: 符慢慢    时间: 2015-6-30 23:59
不一样的。arr是箱子的地址值   而arr[0] 是箱子里面盒子的地址值
作者: weiwei1    时间: 2015-7-1 09:57
一个是地址值。后面的是对应0索引的值
作者: jlnu_wl    时间: 2015-7-1 10:24
不一样的,System.out.println(arr);这个打印输出的应该是二维数组的值
  System.out.println(arr[0]);这个打印输出的应该二维数组中第一个一维数组的值
作者: 牵着蜗牛去逛街    时间: 2015-7-1 10:30
第一个是二维数组的地址,第二个是这个二维数组第一个元素的地址,一楼那个比喻很详细。
作者: 林大涛    时间: 2015-7-1 10:34
如果array是一维数组,那么 sop(array)跟sop(array[0])是一样的
作者: JAVADing    时间: 2015-7-1 17:54
围观围观围观
作者: 357955778    时间: 2015-7-1 21:10
arr是由四个一维数组构成的,arr指向这个二维数组地址,arr[0]指向这个二维数组的第一个元素(第一个一维数组)的地址。
作者: kime    时间: 2015-7-1 21:43
arr代表整个二维数组的地址,arr[0]代表这个二维数组中第一个一维数组的地址。所以结果不一样。
作者: firwood    时间: 2015-7-1 21:51
array是在数组的地址,在栈内存中。array[0]的地址是array里面的元素的地址,在堆内存中。是array地址所指向的地址。

19.jpg (70.12 KB, 下载次数: 15)

19.jpg

作者: wuwenwen3779    时间: 2015-7-1 22:40
林大涛 发表于 2015-7-1 10:34
如果array是一维数组,那么 sop(array)跟sop(array[0])是一样的

一维数组,array【0】不是应该直接输出数组第一个元素了吗
作者: wuwenwen3779    时间: 2015-7-1 22:42
符慢慢 发表于 2015-6-30 23:59
不一样的。arr是箱子的地址值   而arr[0] 是箱子里面盒子的地址值

你家头像好可爱呢,你知道我是谁不
作者: wuwenwen3779    时间: 2015-7-1 22:43
小骆驼 发表于 2015-6-26 23:57
System.out.println(arr);打印的是这个二维数组的地址值,而System.out.println(arr[0]);打印的是二维数组中 ...

谢过了,解释的很详细明白,赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2