黑马程序员技术交流社区

标题: 一点小问题 [打印本页]

作者: $love    时间: 2013-5-4 18:37
标题: 一点小问题
本帖最后由 $love 于 2013-5-4 22:08 编辑

String  name="张三";
int[] nums={1,2}
为什么同样是引用数据,打印name就是“张三”,而打印nums就是内存地址值?
不怎么理解?
麻烦大神讲的详细点?
谢谢
作者: 金辉    时间: 2013-5-4 18:48
本帖最后由 金辉 于 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 表地址
作者: 李德全    时间: 2013-5-4 18:58
要打印数组里面的元素,需要下标的 数字的名称 是地址
作者: 花开花落总相似    时间: 2013-5-4 19:45
  String  name="张三";   name这个是在sate segment 里面的字符串常量 name直接指向 张三 这个字符串  ;
int[] nums={1,2}    num 是一个指向 int 数组的地址 要用地址是调用数组里面的内容的 ;
   我的理解就是这样的 希望可以帮到你 呵呵
  
  
作者: 杨兴庭    时间: 2013-5-4 21:34
楼主定义的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

作者: 杨兴庭    时间: 2013-5-4 21:34
楼主定义的name是变量在内存中的作用相当于我们生活中的容器,也可以题解成盒子,楼主定义的盒子是String类型,这个盒子只能装String类型的数据,该字符串定义单位为单个,也就是说定义的盒子只能装单个单位的数据,而数组就可以理解成很多同类盒子顺序连接组成的大盒子,大盒子内装了小盒子,小盒子内装数据。
数组是以顺序结构的形式保存在堆内存中的,数组首元素地址就是该数组的地址,数组的下标就是指针,打印的时候,指针变量指向对应的指针,打印出该元素,楼主打印时,没有指定要打印的数组元素,直接打印nums数组变量,并没有指定打印出数组内的某个元素,所以打印出的是nums在内存中的位置。
正确写法加个for循环指定指针就可以了,代码如下:
for(int i=0;i<nums.length;i++)
{
     System.out.println(nums[i]);
}
作者: $love    时间: 2013-5-4 22:09
尹桥印 发表于 2013-5-4 18:37
先占楼,再回答
int[] nums={1,2}
这个nums中的元素是存在堆内存当中的,nums只是指向的一个地址值,要调用 ...

谢谢!:handshake
作者: $love    时间: 2013-5-4 22:11
金辉 发表于 2013-5-4 18:48
合适的呀,你是不是直接写成System.out.println(nums);了打出来是
[ 表数组, I 表数据类型为 int, @16bd8e ...

谢谢!:)
作者: $love    时间: 2013-5-4 22:12
花开花落总相似 发表于 2013-5-4 19:45
String  name="张三";   name这个是在sate segment 里面的字符串常量 name直接指向 张三 这个字符串  ;
...

非常感谢!
作者: $love    时间: 2013-5-4 22:14
杨兴庭 发表于 2013-5-4 21:34
楼主定义的name是变量在内存中的作用相当于我们生活中的容器,也可以题解成盒子,楼主定义的盒子是String类 ...

非常感谢!




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