黑马程序员技术交流社区

标题: 突然想到一个问题!关于int[] a=new int[2];a是什么?已解决 [打印本页]

作者: 梁小波    时间: 2012-5-16 19:21
标题: 突然想到一个问题!关于int[] a=new int[2];a是什么?已解决
本帖最后由 梁小波 于 2012-5-16 20:18 编辑

突然想到一个问题!
1.关于int[] a=new int[2];如果System.out.println(a);[I@c17164;貌似是一个地址但好像又不是!这到底是什么?求解!
如果是地址的话【i@好像说不通吧。!!!如果是地址指出[I@ 这几个字符是什么意思?
2.另外在java我们可以对引用变量做一些什么操作?比如+-;当然我知道这两个肯定不行!
作者: 郭宁    时间: 2012-5-16 19:35
当然是地址啦~ @后面的 十六进制 c17164 即为地址

JAVA 不支持指针的,不能进行地址运算,所以不支持加减什么的,但支持 == 运算
作者: 梁小波    时间: 2012-5-16 19:45
郭宁 发表于 2012-5-16 19:35
当然是地址啦~ @后面的 十六进制 c17164 即为地址

JAVA 不支持指针的,不能进行地址运算,所以不支持加减 ...

那打印的[I@这几个字符表示是什么?

作者: 余宏    时间: 2012-5-16 19:54
a是你定义的数组的名字
[I@c17164是你创建的引用所对应的地址
类可以做什么操作,引用变量就可以做什么操作
作者: 古银平    时间: 2012-5-16 19:55
第一个[代表是一维数组,int[] a=new int[2];是定义了一个int[]型的变量a,在栈内存中给a分配一个空间,存储着new在堆内存中分配的数组的首地址,a根据首地址来访问堆内存中的数组,用脚表来指定数组的元素。毕老师的视频第三天最后一个和第四天的上面讲的挺详细的。
作者: 梁小波    时间: 2012-5-16 19:58
古银平 发表于 2012-5-16 19:55
第一个[代表是一维数组,int[] a=new int[2];是定义了一个int[]型的变量a,在栈内存中给a分配一个空间,存 ...

是吗,没有看那几天的,看一下去!
作者: 李斌    时间: 2012-5-16 20:01
int[] a=new int[2]

[I@c17164: [ 指的是数组型的引用,I 表示int类型的数组 c17164 数组的内存存放地址 哈希值的十六进制表示形式。


作者: 廖理    时间: 2012-5-16 20:08
本帖最后由 廖理 于 2012-5-16 20:10 编辑

[I@c17164
[ 表示是一个一位数组
I 表示是一个int型的数组
@ 是分隔符表示的是at
c17164 表示的是hashCode()的值,也可以理解为地址,这里是用16进制表示的
例如Object中的tostring方法的实现,
     getClass().getName() + '@' + Integer.toHexString(hashCode())
  getClass().getName()为获得类型名
对于哈希值的加减,你只能通过hashCode() 获得后才能加减,所以这是没有实际意义的。



作者: 冯越    时间: 2012-5-16 20:25
很负责任的告诉你 8楼的回答是完全正确的!!! 被他抢先了 嘿嘿,本来我是想拿这篇帖子的技术分的!!!
作者: suiabing    时间: 2012-5-16 20:52
关于int[] a=new int[2];
a
只是一个变量,其值指向内存中的一个地址

其中前面【代表的是一个数组。符号很多每个都有特定的意思,数组、二维数组,后面紧跟着的是这个数组的元素类型,i就代表int 还有其他的 比如long形 double形 String类型等
@后面的是它的内存值。实际过程 我们可以根据这个进行判断、查错等。


        public static void main(String[] args) {
                int[] a={2};
                int[][] aa = {{3}};
                String[] s = {"hello"};
                System.out.println(a);
                System.out.println(aa);
                System.out.println(s);
                System.out.println(a.hashCode());
               
        }

[I@3ce53108
[[I@6af62373
[Ljava.lang.String;@459189e1
1021653256----------------a.hashcode



作者: 杨康    时间: 2012-5-16 21:07
是你创建的一维数组在内存中的初始地址值,[表示的就是数组[]的意思;I表示的是该数组中元素的类型为int型,@后面就是该数组在内存中的地址值。
同理二维数组在内存中的地址值表现形式就为[[I@xxxxxx(假设创建的是int型二维数组)。

作者: 徐炯    时间: 2012-5-18 18:26
关于int[] a=new int[2];
a只是一个变量,其值指向内存中的一个地址

其中前面【代表的是一个数组。符号很多每个都有特定的意思,数组、二维数组,后面紧跟着的是这个数组的元素类型,i就代表int 还有其他的 比如long形 double形 String类型等
@后面的是它的内存值。实际过程 我们可以根据这个进行判断、查错等。

        public static void main(String[] args) {
                int[] a={2};
                int[][] aa = {{3}};
                String[] s = {"hello"};
                System.out.println(a);
                System.out.println(aa);
                System.out.println(s);
                System.out.println(a.hashCode());
               
        }

[I@3ce53108
[[I@6af62373
[Ljava.lang.String;@459189e1
1021653256----------------a.hashcode

10楼的回答是完全正确的!!!






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