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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© $love 中级黑马   /  2013-5-4 18:37  /  2079 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 $love 于 2013-5-4 22:08 编辑

String  name="张三";
int[] nums={1,2}
为什么同样是引用数据,打印name就是“张三”,而打印nums就是内存地址值?
不怎么理解?
麻烦大神讲的详细点?
谢谢

10 个回复

倒序浏览
本帖最后由 金辉 于 2013-5-4 18:58 编辑
  1. public static void main(String[] args) {
  2.                
  3.             String  name="张三";
  4.              int[] nums={1,2};
  5.           System.out.println(name);     
  6.           for(int i:nums)
  7.           {
  8.                   System.out.println(i);
  9.           }
  10.             
  11.         }
复制代码
合适的呀,你是不是直接写成System.out.println(nums);了打出来是
[I@de6ced [ 表数组, I 表数据类型为 int, @16bd8ea 表地址
回复 使用道具 举报
要打印数组里面的元素,需要下标的 数字的名称 是地址
回复 使用道具 举报
  String  name="张三";   name这个是在sate segment 里面的字符串常量 name直接指向 张三 这个字符串  ;
int[] nums={1,2}    num 是一个指向 int 数组的地址 要用地址是调用数组里面的内容的 ;
   我的理解就是这样的 希望可以帮到你 呵呵
  
  
回复 使用道具 举报
楼主定义的name是变量在内存中的作用相当于我们生活中的容器,也可以题解成盒子,楼主定义的盒子是String类型,这个盒子只能装String类型的数据,该字符串定义单位为单个,也就是说定义的盒子只能装单个单位的数据,而数组就可以理解成很多同类盒子顺序连接组成的大盒子,大盒子内装了小盒子,小盒子内装数据。
数组是以顺序结构的形式保存在堆内存中的,数组首元素地址就是该数组的地址,数组的下标就是指针,打印的时候,指针变量指向对应的指针,打印出该元素,楼主打印时,没有指定要打印的数组元素,直接打印nums数组变量,并没有指定打印出数组内的某个元素,所以打印出的是nums在内存中的位置。
正确写法加个for循环指定指针就可以了,代码如下:
for(int i=0;i<nums.length;i++)
{
     System.out.println(nums[i]);
}

数组.png (11.51 KB, 下载次数: 0)

数组.png
回复 使用道具 举报
楼主定义的name是变量在内存中的作用相当于我们生活中的容器,也可以题解成盒子,楼主定义的盒子是String类型,这个盒子只能装String类型的数据,该字符串定义单位为单个,也就是说定义的盒子只能装单个单位的数据,而数组就可以理解成很多同类盒子顺序连接组成的大盒子,大盒子内装了小盒子,小盒子内装数据。
数组是以顺序结构的形式保存在堆内存中的,数组首元素地址就是该数组的地址,数组的下标就是指针,打印的时候,指针变量指向对应的指针,打印出该元素,楼主打印时,没有指定要打印的数组元素,直接打印nums数组变量,并没有指定打印出数组内的某个元素,所以打印出的是nums在内存中的位置。
正确写法加个for循环指定指针就可以了,代码如下:
for(int i=0;i<nums.length;i++)
{
     System.out.println(nums[i]);
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
尹桥印 发表于 2013-5-4 18:37
先占楼,再回答
int[] nums={1,2}
这个nums中的元素是存在堆内存当中的,nums只是指向的一个地址值,要调用 ...

谢谢!:handshake
回复 使用道具 举报
金辉 发表于 2013-5-4 18:48
合适的呀,你是不是直接写成System.out.println(nums);了打出来是
[ 表数组, I 表数据类型为 int, @16bd8e ...

谢谢!:)
回复 使用道具 举报
花开花落总相似 发表于 2013-5-4 19:45
String  name="张三";   name这个是在sate segment 里面的字符串常量 name直接指向 张三 这个字符串  ;
...

非常感谢!
回复 使用道具 举报
杨兴庭 发表于 2013-5-4 21:34
楼主定义的name是变量在内存中的作用相当于我们生活中的容器,也可以题解成盒子,楼主定义的盒子是String类 ...

非常感谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马