黑马程序员技术交流社区

标题: 一个小问题,为什么字符数组不可以这样直接转成字符串? [打印本页]

作者: 马富林    时间: 2013-11-22 01:13
标题: 一个小问题,为什么字符数组不可以这样直接转成字符串?
一个关于字符数组转换成字符串的问题
为什么下面这段代码编译报错呢?
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char[] arr={'c','d','r','g','y','h','e'};
  6.        
  7.         System.out.println(arr,1,3);
  8.        
  9.         }
  10. }
复制代码
而下面的代码却是可以正常运行
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char[] arr={'c','d','r','g','y','h','e'};
  6.                 String ss=new String(arr,1,3);
  7.        
  8.                 System.out.println(arr);
  9.        
  10.         }
  11. }
复制代码
请帮我看看第一段代码那样写为什么会错
下面是第一段代码的报错情况


作者: 汪洋大海    时间: 2013-11-22 03:52
本帖最后由 汪洋大海 于 2013-11-22 03:55 编辑

System.out.println() 这句话做了什么。System这个类调用静态字段out返回一个PrintStream对象。这个对象调用方法println()。println()只能传入一个参数。这个方法不是把字符数组转成字符串,而是把数值写入到标准输出设备中。

作者: likeermei    时间: 2013-11-22 09:17
你下面打印的话应该也是地址  不会是字符的,system类里面全是静态方法
作者: 冯国强    时间: 2013-11-22 10:05
这个问题首先是System.out.println();该句是输出语句,参数只能有一个。这是一个问题!另外,通过第一个问题应该是将字符数组转换为字符串,其中有两种方法:
      第一种:字符串对象的构造函数
                   String(char【】,offset,count);能够正确运行的是使用了这个方法,这是将字符数组中的一部分转换成字符串。
      第二种:String copyValueOf(char【】,offset,count);该方法为静态方法。
上面能够运行的方法是利用了第一种转换法,将转化后的字符串赋值给str,并封装成一个新的字符串,再赋值给ss应用变量。下面的输出语句输出的是str字符串。
作者: smileven    时间: 2013-11-22 10:30
借1楼的话(回答好漂亮):
System这个类调用静态字段out返回一个PrintStream对象。这个对象调用方法println()。
println()只能传入一个参数。这个方法不是把字符数组转成字符串,而是把数值写入到标准输出设备中。
补充:如果你想在System.out.println()中将字符数组转成字符串,那么可以这样写。
class Demo
{
        public static void main(String[] args)
        {
                char[] arr={'c','d','r','g','y','h','e'};
                System.out.println(new String(arr,1,3));
        }
}
println()不能完成转换操作的,这里的转换操作时用new String(arr , 1 , 3)完成的,然后作为一个字符串对象让println()输出。
而且这样写当System.out.println()比你的第二种方式内存使用效率更高~。

作者: freehiker    时间: 2013-11-22 12:16
System.out.println(new String(arr,1,3)); 这样就可以了
作者: 马富林    时间: 2013-11-22 21:10
smileven 发表于 2013-11-22 10:30
借1楼的话(回答好漂亮):
System这个类调用静态字段out返回一个PrintStream对象。这个对象调用方法println( ...

明白了,System.out.println(new String(arr,1,3));这个方法就是我想要的结果。
作者: likeermei    时间: 2013-11-23 16:06
因为创建String对象。调用了。他的构造函数。构造函数里有把char数组转换为String类型的对象




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