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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈少文 中级黑马   /  2012-6-14 21:28  /  1520 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//代码
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 一个对象呢?

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
本帖最后由 刘克方 于 2012-6-14 21:33 编辑

首先String  s = String(c)不符合java的语法,new对象的作用是为对象分配内存空间;
不通过new没办法创建这个对象。
回复 使用道具 举报
在new的时候就是相当于调用String类的构造函数,String一个类,是一种引用类型,所以必须要用new关键字来产生对象!
回复 使用道具 举报
没有使用static修饰的方法和属性,只可通过实例来调用,创建对象的根本途径是构造器,必须通过new关键字来调用某个类的构造器来创建这个类的实例
回复 使用道具 举报
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申请的空间。

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你既然用String s定义了s,那个s就是一个字符串类型的引用变量,那么s就只能指向字符串对象,所以要把字节数组转成字符串,String s = new String(c);是利用String类的构造函数把字节数组转换成字符串。String(C)显然是错误的语法,就算你想把字节数组强制转为String类型,也应该书写成(String)C,当然这也是不行的,会出现转换异常
如果你不想new对象,那么可以用String类的静态方法String.valueOf(c) ,一样可以转成字符串,但是你要知道,字符串就是对象,所以即使用静态方法,返回的还是对象。
回复 使用道具 举报
new的作用调用构造方法,在堆中分配内存空间,创建对象
String s;
定义一个String类型的引用,但它只是一个引用,并没有实际在堆中分配空间。
当使用这样的代码:
String s = new String(c);
就在堆中分配了空间。

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马