黑马程序员技术交流社区

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

作者: 李会成    时间: 2013-1-30 13:59
标题: 突然想到一个问题!关于int[] a=new int[2];a是什么?
本帖最后由 李会成 于 2013-2-1 11:11 编辑

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

作者: 张庚    时间: 2013-1-30 14:27
I@c17164;  16进制的就是地址 I@加的默认标示
作者: pzfpang449    时间: 2013-1-30 14:35
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);
        }


希望对楼主有所帮助

作者: 李桐    时间: 2013-1-30 14:37
[I:整形数组
@:at
c17164:地址
作者: 王永彬    时间: 2013-1-30 14:43
[表示数组类型,“@数字”表示一个十六近制的hash地址值,这是调用其数组类型tostring方法时出现的结果。
作者: 黄振    时间: 2013-1-30 14:49
a是一个数组,可以理解为定义常量的扩展形。而int[] a=new int[2];叫定义了一个名字为a的数组,在这个数组中有两个int形的常量,I@c17164是这个数组储存在堆内存的地址。I@是这个地址的硬向定义名称,没什么实际意义,就像人的名称一样,是一个定向的意思,规定好了的,没什么实际意义,这个标识出来知道它是什么就行。
作者: 钱志新    时间: 2013-1-30 20:25
a是你new的int[]数组的名称,后面的那个是像指针一样的标示符。
作者: 沈文杰    时间: 2013-1-30 21:21
问题1:
int[] a=new int[2];a就是你new出来数组的名字,同时也是该数组的首地址System.out.println(a);[I@c17164;[I表示数组类型,@=at,c17164是十六进制表示堆内存为该数组分配的地址。建议多看一下数组在内存中的存储
方式那几个图。

作者: 陈圳    时间: 2013-1-30 23:18
这个打印形式,视频里,毕老师已经讲解过了,你可以复写toString方法来设定自己的打印形式
比如:public String toString()
{
     return "数组:"+a;
}
而系统的是:
public String toString()
{
     return "类型"+"@"+toHex(a);
}
作者: 左兆彬    时间: 2013-1-30 23:24
一瞅就是没看视频的{:soso_e140:}
作者: 黑马李超    时间: 2013-1-31 00:02
左兆彬 发表于 2013-1-30 23:24
一瞅就是没看视频的

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

非常感谢,我明白了
作者: 李培根    时间: 2013-2-18 11:40
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。

请勿再次发此类帖子了!

此贴就关闭了。此后如有再次发现直接封禁处理,请看到此贴的会员也加以注意。





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