黑马程序员技术交流社区

标题: 关于copyValueOf()方法的使用。为什么这样用会失败? [打印本页]

作者: 马富林    时间: 2013-11-22 21:21
标题: 关于copyValueOf()方法的使用。为什么这样用会失败?
下面代码是为了将字符数组转成字符串。可是结果确实空的
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char[] arr={'c','d','r','g','y','h','e'};
  6.                
  7.                 String s=new String();
  8.                 s.copyValueOf(arr);
  9.                 System.out.println(s);
  10.                 System.out.println(s.length());

  11.        
  12.         }
  13. }
复制代码
运行结果只有一个

0

而下面的代码却可以成功转换成字符串,
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char[] arr={'c','d','r','g','y','h','e'};
  6.                
  7.                 String s=String.copyValueOf(arr);
  8.                 System.out.println(s);
  9.                 System.out.println(s.length());

  10.        
  11.         }
  12. }
复制代码
运行结果是
cdrgyhe
7

copyValueOf()方法作为静态方法不是类和对象都可以调用吗?为什么对象调用会失败?


作者: 何丛    时间: 2013-11-22 22:13
楼主,copyValueOf()方法作为静态方法不是类和对象都可以调用,对象调用没有失败
static String copyValueOf(char[] data);  这个方法返回一个String类型的对象
楼主不妨改成这样
String s=new String();
String s2 = s.copyValueOf(arr);   
String是不可变得字符串,s指向的那片空间内的内容是不能改变的,应该是新开辟一个空间放入字符数组转换成的字符串。所以要定义一个变量来存储那片空间的引用
作者: 何丛    时间: 2013-11-22 22:13
楼主,copyValueOf()方法作为静态方法不是类和对象都可以调用,对象调用没有失败
static String copyValueOf(char[] data);  这个方法返回一个String类型的对象
楼主不妨改成这样
String s=new String();
String s2 = s.copyValueOf(arr);   
String是不可变得字符串,s指向的那片空间内的内容是不能改变的,应该是新开辟一个空间放入字符数组转换成的字符串。所以要定义一个变量来存储那片空间的引用
作者: 马富林    时间: 2013-11-22 22:50
何丛 发表于 2013-11-22 22:13
楼主,copyValueOf()方法作为静态方法不是类和对象都可以调用,对象调用没有失败
static String copyValueO ...

那是不是说
String s2 = s.copyValueOf(arr);   
这句代码中对象s其实对结果不产生任何影响,只要是个String对象都可以。s2的值完全是由.copyValueOf(arr);  决定的。
作者: 何丛    时间: 2013-11-22 22:52
马富林 发表于 2013-11-22 22:50
那是不是说
String s2 = s.copyValueOf(arr);   
这句代码中对象s其实对结果不产生任何影响,只要是个Str ...

是的,这是一个静态方法
作者: hurryup    时间: 2013-11-22 23:24
s在栈里面,s.copyValueOf(arr)在堆里面,操作完了,还要给s赋值,不然就是空。
作者: 明月几时有    时间: 2013-11-22 23:36
copyValueOf(arr)这个方法会有一个String类型返回值,楼主不拿变量来接收,当然是空了
不然你也可以直接打印 System.out.println(String.copyValueOf(arr));




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