java的数组输出问题 我定义了一个char[] a={'a','b','c'}; 调用System.out.println(a);输出abc 在定义一个byte[] b={1,2,3}; 调用System.out.println(b);输出[B@6b97fd 为什么不是输出123啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 char是一个字byte是一个字节 存储方式的位数都不一样。 char[]和byte[]都是数组object,char[]里的元素存储在常量池里,而byte[]里的元素存储在内存堆里,前者直接输出元素,后者输出的是byte[]这个数组对象所在的内存值。 将程序改写成这个就可以:byte b[]={1,2,3}; for(int i=0;i<3;i++) System.out.print(b[i]); 回复lovelyhermione() :要是按照你的说法我想知道:(1)是不是只要是存放在常量池里的数组元素输出的就是元素,在内存堆里的数组元素输出的就是内存值呢?(2)什么类型的数组是存放在常量池?什么类型的数组是存放在内存的呢(int[] short[] long[] String[] float[] double[]...)?回复kingkang1() :这个我知道,我问题的目的是为什么会输出那样的值,不过也谢谢你^_^. 象 char string 这样的字符,字符串,他们都是放在常量池里面char a='x';char b=a;那么a 和 b 其实共用一个放在常量池里的字符'x',string也是一样(这样设计也许是为了节约空间)int a=1;int b=a;这里a和b在内存里是没任何联系,只是两个内存块里的值是一样,都为1,数值类型的都是至于它们为什么那样输出我也不太清楚,我这个只能解释它们输出结果不一样的原因,呵呵,一起等待高人出现吧 概念不清System.out 方法输出的时候如果是简单类型,会对应的打印出它的实际值,这是方法的重载而如果需要输出的是对象(其中,数组在JAVA中就是一种对象),就会调用该类对象的toString方法,也就是说你System.out.println(aArray);的时候,调用的是数组对象的toString方法,而不是如你所想的输出每个元素。 回复angelleecash(陈亮) :要是按你说的那我上面声明的字符数组他应该是个对象啊,调用Sytem.out.print(a)的话,那么就应该调用toString方法啊,那为什么输出的是字符呢,toString方法应该是输出类名和内存的地址阿?回复lovelyhermione() :按照你说的,我现在是这样理解的,不知道对不对:存放在常量池的数据就会输出他们的元素,而在内存堆里的数据则输出内存值,然后你有说:"象 char string 这样的字符,字符串,他们都是放在常量池里面". 这里我就又有一个问题:String[] s={"a","b","c"};System.out.println(s); 在这我声明了一个字符串数组,他输出又是内存值,元素不是应该存放在常量池中吗?我不知道应该怎样去理解? 放在常量池里这点没错看来这个不是输出不同的原因了...抱歉我也不明白了,帮你顶下回angelleecash(陈亮) ,char和byte都是简单类型啊 String[] s={"a","b","c"}s定义的是一个数组,它存放了三个元素,系统为它分配了内存空间.而S中放着第一个元素的地址,所以输出一个地址.(好像C++中指针的用法)String s="abc",放在常量池中.String[] s={"a","b","c"};放在内在堆中. 建议楼主去把代码反编译,看看汇编代码是怎么运作的,这样就可以解决你的疑惑了。我的理解:char[]之所以会正确输出,正如楼上的所说,数组也是对象,而System.out.println()在输出对象的时候,如果这个对象不是String型的,那么自动会调用这个对象的toString()方法,因为char[]本身就是一个字符数组,已经是格式化了的,所以可以输出。byte[]不会输出,是因为,它是一组字节流,字节流并不是字符,它可能是个各种字符,比如说采取不同的编码,它会出现不同的字符,所以,byte[]在没有明确指定它为什么的时候,它并不会正确输出(只是个人理解),尽管它可能也调用toString()方法,但是JVM不一定会认! 回复 dragon_up() : 你说String s="abc",放在常量池中,我从网上看说String s=new String("abc"),不是放在常量池里.那么我想问下 这个String s=new String("abc");System.out.println(s); 为什么不在常量池里输出的也是abc呢?回复lovelyhermione() :谢谢你,^_^.ps:原来没注意这个问题的时候感觉还好,现在一问觉得连基础都不会了,:( 回复wcj1981(宇宙之神):谢谢,我是个初学者,对你说的什么反编译还不知道,所以发到这里,希望大伙帮帮忙, 晕死 楼上各位们 不懂不要装懂且听我慢慢道来System.out.println()这个方法并没有以byte[]为参数的overload 方法所以系统认为 byte[]是一个object所以调用System.out.println(Object obj)而打印的是obj.toString()而obj.toString()toString 方法返回一个字符串,由类名和 标记符“@”和此对象哈希代码的无符号十六进制表示组成。回答完毕分分拿来 (严重csdn问了问题不给分得朋友) 大神急救,关于addWindowListener的一个问题 使用jdbc怎么实现一次编写 ,到处运行? 如何提高jxl生成文件效率? java类装载机制的实现!!! 想从1/2格式的输入中读入数字 如何在java中调用windows media player 并在客户端显示出来? 高分请教----JFrame类窗口中怎样加载并动态显示游戏画面? 请各位高手帮忙解决。 大家帮帮忙啊 谁在WL下做过JMS的开发,请进来帮帮我,一个小问题。 [十分诡异的JAVA题]关于Load方法问题 学着看API但遇到了问题~达人请进!! 用InstallAnywhere打包为可安装执行的文件?
byte b[]={1,2,3};
for(int i=0;i<3;i++)
System.out.print(b[i]);
要是按照你的说法我想知道:
(1)是不是只要是存放在常量池里的数组元素输出的就是元素,在内存堆里的数组元素输出的就是内存值呢?
(2)什么类型的数组是存放在常量池?什么类型的数组是存放在内存的呢(int[] short[] long[] String[] float[] double[]...)?回复kingkang1() :
这个我知道,我问题的目的是为什么会输出那样的值,不过也谢谢你^_^.
char a='x';
char b=a;
那么a 和 b 其实共用一个放在常量池里的字符'x',string也是一样(这样设计也许是为了节约空间)
int a=1;
int b=a;
这里a和b在内存里是没任何联系,只是两个内存块里的值是一样,都为1,数值类型的都是至于它们为什么那样输出我也不太清楚,我这个只能解释它们输出结果不一样的原因,呵呵,一起等待高人出现吧
System.out 方法输出的时候
如果是简单类型,会对应的打印出它的实际值,这是方法的重载
而如果需要输出的是对象(其中,数组在JAVA中就是一种对象),就会调用该类对象的toString方法,也就是说你System.out.println(aArray);的时候,调用的是数组对象的toString方法,而不是如你所想的输出每个元素。
要是按你说的那我上面声明的字符数组他应该是个对象啊,调用Sytem.out.print(a)的话,那么就应该调用toString方法啊,那为什么输出的是字符呢,toString方法应该是输出类名和内存的地址阿?回复lovelyhermione() :
按照你说的,我现在是这样理解的,不知道对不对:存放在常量池的数据就会输出他们的元素,而在内存堆里的数据则输出内存值,然后你有说:"象 char string 这样的字符,字符串,他们都是放在常量池里面". 这里我就又有一个问题:String[] s={"a","b","c"};System.out.println(s); 在这我声明了一个字符串数组,他输出又是内存值,元素不是应该存放在常量池中吗?我不知道应该怎样去理解?
看来这个不是输出不同的原因了...抱歉
我也不明白了,帮你顶下回angelleecash(陈亮) ,char和byte都是简单类型啊
s定义的是一个数组,它存放了三个元素,系统为它分配了内存空间.而S中放着第一个元素的地址,所以输出一个地址.(好像C++中指针的用法)
String s="abc",放在常量池中.String[] s={"a","b","c"};放在内在堆中.
你说String s="abc",放在常量池中,我从网上看说String s=new String("abc"),不是放在常量池里.那么我想问下 这个String s=new String("abc");System.out.println(s); 为什么不在常量池里输出的也是abc呢?回复lovelyhermione() :
谢谢你,^_^.ps:原来没注意这个问题的时候感觉还好,现在一问觉得连基础都不会了,:(
谢谢,我是个初学者,对你说的什么反编译还不知道,所以发到这里,希望大伙帮帮忙,