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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李会成 于 2013-2-1 11:11 编辑

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

15 个回复

倒序浏览
I@c17164;  16进制的就是地址 I@加的默认标示
回复 使用道具 举报
java中的数组定义方式:int[] x=new int[100]

在内存中java分为栈内存和堆内存,如果光写int[] x;
这句只是在栈内存中定义了一个装数组地址用的变量,而真正的数组地址是在堆内存中的.
new int[100]这句才是在堆内存中定义了数组,
x=new int[100] 是把堆内存中的数组的首地址给栈内存中的变量x,
x也就是指向数组的首地址了,当执行x=null时,x就不指向任何数组的首地址,
堆中也就多了一个没法再用到的数组,垃圾回收器会在一个不确定的时间将该数组销毁.

鉴于楼主希望打印的值不是内存我这有个例子楼主可以看看
例子:
String[] str={"1","2","3","4","5","6","7","8","9","99","999","999","9999"};
        for(int i=0;i<str.length;i++)
        {
            System.out.println(str[i]);
        }
        for(String s:str)
        {
            System.out.println(s);
        }


希望对楼主有所帮助
回复 使用道具 举报
[I:整形数组
@:at
c17164:地址

点评

简洁明了  发表于 2013-1-31 09:17

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1

查看全部评分

回复 使用道具 举报
[表示数组类型,“@数字”表示一个十六近制的hash地址值,这是调用其数组类型tostring方法时出现的结果。
回复 使用道具 举报
a是一个数组,可以理解为定义常量的扩展形。而int[] a=new int[2];叫定义了一个名字为a的数组,在这个数组中有两个int形的常量,I@c17164是这个数组储存在堆内存的地址。I@是这个地址的硬向定义名称,没什么实际意义,就像人的名称一样,是一个定向的意思,规定好了的,没什么实际意义,这个标识出来知道它是什么就行。
回复 使用道具 举报
a是你new的int[]数组的名称,后面的那个是像指针一样的标示符。
回复 使用道具 举报
问题1:
int[] a=new int[2];a就是你new出来数组的名字,同时也是该数组的首地址System.out.println(a);[I@c17164;[I表示数组类型,@=at,c17164是十六进制表示堆内存为该数组分配的地址。建议多看一下数组在内存中的存储
方式那几个图。
回复 使用道具 举报
陈圳 高级黑马 2013-1-30 23:18:01
9#
这个打印形式,视频里,毕老师已经讲解过了,你可以复写toString方法来设定自己的打印形式
比如:public String toString()
{
     return "数组:"+a;
}
而系统的是:
public String toString()
{
     return "类型"+"@"+toHex(a);
}
回复 使用道具 举报
一瞅就是没看视频的{:soso_e140:}
回复 使用道具 举报
左兆彬 发表于 2013-1-30 23:24
一瞅就是没看视频的

不错。。毕老师讲的特别详细
回复 使用道具 举报
通过这么个代码public class ArrayTest {
        public static void main(String[] args){
                int[] a = new int[2];
                System.out.println(a);
        }
}
运行的结果为[I@6b97fd,这个值得话代表的是 这个a是一个数组,并且这个数组有个哈希值,我这样直接打印出来的数字代表的是哈希值,在所有类的主类Object中有个方法hashCode();你看一下就懂了,去看看视频吧
回复 使用道具 举报
int 数组的toString()方法没被重写覆盖,
public String toString()
{
   String a="";
for(int i = 0;i<arr.length;i++)
     a=a+arr[i];
  return a;
}
才会
回复 使用道具 举报
这个毕老师 把每个 部分都讲了- -就像李桐同学说的
回复 使用道具 举报
李桐 发表于 2013-1-30 14:37
[I:整形数组
@:at
c17164:地址

非常感谢,我明白了
回复 使用道具 举报
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。

请勿再次发此类帖子了!

此贴就关闭了。此后如有再次发现直接封禁处理,请看到此贴的会员也加以注意。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马