黑马程序员技术交流社区

标题: 将字符数组转成字符串 [打印本页]

作者: 陈少文    时间: 2012-6-14 21:28
标题: 将字符数组转成字符串
//代码
class Var
{
public static void StringDemo()
{
  char[] c = {'a','b','c','d','e'};
  
  String s = new String(c);

  System.out.println(s);
}

public static void main(String[] args)
{
  StringDemo();
}
}
编译可以通过。如果把String s = new String(c);
改为String s = String(c);时编译错误。想问一下,为什么一定要new 一个对象呢?

作者: 刘克方    时间: 2012-6-14 21:29
本帖最后由 刘克方 于 2012-6-14 21:33 编辑

首先String  s = String(c)不符合java的语法,new对象的作用是为对象分配内存空间;
不通过new没办法创建这个对象。

作者: Kristy_Li    时间: 2012-6-14 21:35
在new的时候就是相当于调用String类的构造函数,String一个类,是一种引用类型,所以必须要用new关键字来产生对象!
作者: 郑冬    时间: 2012-6-14 21:41
没有使用static修饰的方法和属性,只可通过实例来调用,创建对象的根本途径是构造器,必须通过new关键字来调用某个类的构造器来创建这个类的实例
作者: 王明明    时间: 2012-6-14 21:41
1、String对象的初始化

由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:

                            String s = “abc”;

                            s = “Java语言”;

                   其实按照面向对象的标准语法,其格式应该为:

                            String s = new String(“abc”);

                            s = new String(“Java语言”);

只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。例如String s = new String(“abc”);实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。

作者: 李盼    时间: 2012-6-14 21:43
你既然用String s定义了s,那个s就是一个字符串类型的引用变量,那么s就只能指向字符串对象,所以要把字节数组转成字符串,String s = new String(c);是利用String类的构造函数把字节数组转换成字符串。String(C)显然是错误的语法,就算你想把字节数组强制转为String类型,也应该书写成(String)C,当然这也是不行的,会出现转换异常
如果你不想new对象,那么可以用String类的静态方法String.valueOf(c) ,一样可以转成字符串,但是你要知道,字符串就是对象,所以即使用静态方法,返回的还是对象。

作者: 刘建龙    时间: 2012-6-14 22:10
new的作用调用构造方法,在堆中分配内存空间,创建对象
String s;
定义一个String类型的引用,但它只是一个引用,并没有实际在堆中分配空间。
当使用这样的代码:
String s = new String(c);
就在堆中分配了空间。




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