黑马程序员技术交流社区
标题:
char int 数组的问题
[打印本页]
作者:
刘晓康
时间:
2012-4-4 22:19
标题:
char int 数组的问题
为什么 char [] chs = {'2','1'}; 可以直接用System.out.priint(chs);输出数组元素
而 int [] arr = {2,1}; 用System.out.priint(arr); 输出的 却是地址
char 不是用是引用的对内存里面的数据么 为什么能直接输出值?
作者:
黄长利
时间:
2012-4-4 22:35
本帖最后由 黄长利 于 2012-4-4 22:36 编辑
这个在后面讲到System类的时候有讲到,
是因为System类的out方法调用了java IO包中的 PrintStream类中的println(char[] s),
所以字符型数组可以直接打印出数组元素
而在PrintStream类中没有println(int[] s)方法,所以不能直接打印整型数组元素。
作者:
胡生蒙
时间:
2012-4-4 22:45
char [] chs = {'2','1'};
System.out.priint(chs);
输出的时候是调用的printStream的print(char s)方法
public void print(char[] s)打印字符数组。按照平台的默认字符编码将字符转换为字节,并完全以 write(int) 方法的方式写入这些字节。
作者:
孙利川
时间:
2012-4-4 22:49
本帖最后由 孙利川 于 2012-4-4 22:59 编辑
这个应该与print方法有关系吧,print方法有几个重载方法,当传入的参数是字符数组时会输出其值,而对于其它数组则会输出数组对象的toString()方法的返回值。
public void print(char[] s)打印字符数组。按照平台的默认字符编码将字符转换为字节,并完全以 write(int) 方法的方式写入这些字节。
public void print(Object obj)打印对象。按照平台的默认字符串编码将 String.valueOf(Object) 方法生成的字符串转换为字节,并完全以 write(int) 方法的方式写入这些字节。
而String.valueOf(Object) 方法输出的就是Object.toString()的返回值。
作者:
王永旺
时间:
2012-4-4 23:12
楼主在验证一下,我看不到这种现象。 两个代码输出都是地址!
class Demo
{
public static void main(String[] args)
{
int[] arr= {1,2};
char[] chs ={'1','2'};
System.out.println("int="+arr);
System.out.println("char="+chs);
}
}
作者:
姜志钦
时间:
2012-4-4 23:42
王永旺 发表于 2012-4-4 23:12
楼主在验证一下,我看不到这种现象。 两个代码输出都是地址!
class Demo
{
int[] arr= {1,2};
char[] chs ={'1','2'};
System.out.println("int="+arr);
System.out.println("char="+chs); 你这边加上了“+”字符串连接符,已经被自动转化为字符串,与楼主问的单个字符不是一回事, 要把 System.out.println("char="+chs); 改成 System.out.println(chs);
作者:
程旦
时间:
2012-4-4 23:47
其实各位讲的很清楚了,就是print方法重载了。。楼主去看看jdk文档就行了
作者:
yangshang1
时间:
2012-4-5 06:54
public void println(char x[]) {//当传char数组时候的源码
synchronized (this) {
print(x);
newLine();
}
public void print(char s[]) {
write(s);
}
private void write(char buf[]) {
try {
synchronized (this) {
ensureOpen();
textOut.write(buf);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush) {
for (int i = 0; i < buf.length; i++)
if (buf[i] == '\n')
out.flush();
}
}
}
将数组的数遍历出来
作者:
彭威
时间:
2012-4-5 21:44
1:输出字符串型数组System.out.priint(chs)时,系统调用的是printStream的print(char s)方法;
默认字符编码将字符转换为字节,可以直接输出这些数组元素;
2:而输出数组元素System.out.priint(arr)这种方法是不行的,系统没有提供这种变换,
直接打印出的是这个数组对应的哈希内存值的。
另:这种输出
System.out.println("char="+chs);也是输出不到的 ,“+”造成的字符串连接的输出还是char和内存,
与System.out.println(chs)直接输出字符串数组元素是不一样的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2