zxq01 发表于 2020-4-24 14:12:37

萌新问题 getChars和toCharArray

本帖最后由 zxq01 于 2020-4-29 16:32 编辑

public static void main(String[] args) {
                // TODO Auto-generated method stub
                String s1=new String( );
          char data[ ]={ 'a', 'b', 'c', 'd', 'e', 'f'};
          s1=s1.copyValueOf(data);
          System.out.println(" s1="+s1);
          s1=s1.copyValueOf(data,2,3);
          System.out.println(" s1="+s1);
          s1.getChars(1,2, data,0);
          System.out.println(" data="+data);
          data=s1.toCharArray( );
          System.out.println(" data="+data);
          String s2=new String( );
          String s3=new String( );
          s2=s1.substring(0);
          System.out.println(" s2="+s2);
          s3= s1.substring(1,2);
          System.out.println(" s3="+s3);

        }

结果为什么是s1=abcdef   data=[C@18a992fdata=[C@4f1d0d s2=abcdef s3=b

倒戈卸甲 发表于 2020-4-24 15:31:34

本帖最后由 倒戈卸甲 于 2020-4-24 15:54 编辑

这个要彻底弄清楚,你得阅读打印流的源码,它会把传入的参数转换成字符串再做打印。你可以先记几个结论:全部普通数据类型打印流都重载了对应的成员方法,所以普通数据类型全部可以打印出内容。对于引用数据类型,首先字符串总是会打印内容,因为有其重载形式;其次集合重写了toString方法,也能打印出内容;而如果传入字符数组(只传入数组名这一个变量,不能有拼接之类的操作),因为打印流同样有此重载形式的方法,也能打印内容。但其它类型的数组,因为没有对应的重载形式,只会打印出传入的变量的地址。对于重写了toString方法的对象,会按照重写后的方法来打印,没有则按照默认的toString方法来打印(结果也是打印变量的地址)

倒戈卸甲 发表于 2020-4-24 16:10:09

我这说的有些啰嗦了,等你学习了java的基类Object,知道所有java对象都会继承其toString方法后,自然会明白其中原理
页: [1]
查看完整版本: 萌新问题 getChars和toCharArray