A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一个关于字符数组转换成字符串的问题
为什么下面这段代码编译报错呢?
  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. }
复制代码
请帮我看看第一段代码那样写为什么会错
下面是第一段代码的报错情况

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 汪洋大海 于 2013-11-22 03:55 编辑

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

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
你下面打印的话应该也是地址  不会是字符的,system类里面全是静态方法
回复 使用道具 举报
这个问题首先是System.out.println();该句是输出语句,参数只能有一个。这是一个问题!另外,通过第一个问题应该是将字符数组转换为字符串,其中有两种方法:
      第一种:字符串对象的构造函数
                   String(char【】,offset,count);能够正确运行的是使用了这个方法,这是将字符数组中的一部分转换成字符串。
      第二种:String copyValueOf(char【】,offset,count);该方法为静态方法。
上面能够运行的方法是利用了第一种转换法,将转化后的字符串赋值给str,并封装成一个新的字符串,再赋值给ss应用变量。下面的输出语句输出的是str字符串。

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

回复 使用道具 举报
借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()比你的第二种方式内存使用效率更高~。

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

回复 使用道具 举报
System.out.println(new String(arr,1,3)); 这样就可以了
回复 使用道具 举报
smileven 发表于 2013-11-22 10:30
借1楼的话(回答好漂亮):
System这个类调用静态字段out返回一个PrintStream对象。这个对象调用方法println( ...

明白了,System.out.println(new String(arr,1,3));这个方法就是我想要的结果。
回复 使用道具 举报
因为创建String对象。调用了。他的构造函数。构造函数里有把char数组转换为String类型的对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马