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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 梁小波 于 2012-5-16 20:18 编辑

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

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

11 个回复

倒序浏览
当然是地址啦~ @后面的 十六进制 c17164 即为地址

JAVA 不支持指针的,不能进行地址运算,所以不支持加减什么的,但支持 == 运算
回复 使用道具 举报
郭宁 发表于 2012-5-16 19:35
当然是地址啦~ @后面的 十六进制 c17164 即为地址

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

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

是吗,没有看那几天的,看一下去!
回复 使用道具 举报
李斌 中级黑马 2012-5-16 20:01:32
7#
int[] a=new int[2]

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

回复 使用道具 举报
廖理 中级黑马 2012-5-16 20:08:26
8#
本帖最后由 廖理 于 2012-5-16 20:10 编辑

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


评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
冯越 中级黑马 2012-5-16 20:25:49
9#
很负责任的告诉你 8楼的回答是完全正确的!!! 被他抢先了 嘿嘿,本来我是想拿这篇帖子的技术分的!!!
回复 使用道具 举报
关于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


评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
是你创建的一维数组在内存中的初始地址值,[表示的就是数组[]的意思;I表示的是该数组中元素的类型为int型,@后面就是该数组在内存中的地址值。
同理二维数组在内存中的地址值表现形式就为[[I@xxxxxx(假设创建的是int型二维数组)。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
关于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楼的回答是完全正确的!!!

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