黑马程序员技术交流社区

标题: 关于数组输出问题 [打印本页]

作者: 忧伤    时间: 2013-9-5 21:38
标题: 关于数组输出问题
本帖最后由 忧伤 于 2013-9-10 22:46 编辑

char c[]=new char[5];
c[0]='H';
c[1]='E';
c[2]='L';
c[3]='L';
c[4]='O';
char[] qq={'q','w','s'};
int[] ay={1,3,4,5};
String[] yy={"我爱","你"};
for(int j=0;j<5;j++)
{
System.out.println(c[j]);}
System.out.println(c);
String str=new String(c);
System.out.println(yy);
System.out.println(ay);
System.out.println(str);
System.out.println(qq);
为什么输出字符数组的时候可以直接写数组名而字符串和int型数组的时候却输出的是数组的地址


作者: 常在河边走_    时间: 2013-9-5 21:55
本帖最后由 常在河边走_ 于 2013-9-5 22:06 编辑

arr数组名(引用数据类型),所以System.out.println(arr);打印的是由哈希算法得到的地址。
为什么System.out.println(ch);打印的是abc?
看例子打印结果是:abc                  这应该能想通的
重点来了::字符串和字符类型数组啥关系?字符串就是一个字符类型的数组。
String str="abc";    等效于:char[] ch ={'a','b','c'};  String str = new String(ch);
System.out.println(ch);相当于System.out.println("abc");
虽然System.out.println(ch);调用的是PrintStream类(System.out对象所属的类)的println(char[])方法,System.out.println("abc");调用的是PrintStream类的println(String)方法,但他们底层都是按照平台的默认字符编码将字符串的字符转换为字节,并完全以 write(int) 方法的方式写入这些字节。


作者: 花海1989    时间: 2013-9-5 22:25
字符数组的时候可以直接写数组名是因为:里面重写了tostring方法:而字符串和int型数组的时候却输出的是数组的地址是因为:他只是继承了objeat里面固有的tostring方法。
作者: Bad_Boy    时间: 2013-9-5 22:30
字符拼接成字符串调用的是Sting类中重写后的toString()方法,所以输出的是字符串;而字符串和int[]数组调用的则是Object类中的toString()方法,返回的是该对象的字符串表示形式:由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成
作者: 王松松    时间: 2013-9-5 22:50
  1. class ObjectTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char[] a = new char[]{'d','s'};
  6.                 int[] b = new int[]{1,2,3};
  7.                 String[] s = new String[]{"eqw","dsad"};
  8.                 int[][] c = new int[2][3];
  9.                 Object obj = new Object();
  10.                 System.out.println(a);//这里是Println(char[])
  11.                 System.out.println(a.toString());//这里是Println(String)
  12.                 System.out.println(b);
  13.                 System.out.println(s);
  14.                 System.out.println(c);
  15.         }
  16. }
复制代码

作者: 胡志翔    时间: 2013-9-6 12:50
字符数组调用String类重写了toString()方法
返回值是字符串本身

String数组和int数组是调用Object类原有toString()方法
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())

作者: 杨增坤    时间: 2013-9-9 20:05
楼主,您好!

如果您的问题解决了,请把您问题的未解决更改为已解决

谢谢合作!







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