黑马程序员技术交流社区

标题: 比较奇葩的问题 [打印本页]

作者: 刘海陆    时间: 2013-6-5 21:55
标题: 比较奇葩的问题
本帖最后由 刘海陆 于 2013-6-9 12:53 编辑

下面的代码,为什么红色的报错呢,不都是传递char[] 吗??               
                Class<String> clazz =  String.class;
                Constructor<String> constructor = String.class.getConstructor(char[].class);
                String s = constructor.newInstance(new char[]{'张','飒'});
                String s1 = constructor.newInstance({'张','飒'});
                System.out.println(s);


作者: peerless2012    时间: 2013-6-8 10:05
先按对的来吧,我也没看出来。。。。。坐等高人吧
作者: yin1031468524    时间: 2013-6-8 10:22
char是一个字节的吧!你这中字符占两字节了,
作者: 刘海陆    时间: 2013-6-9 08:49
yin1031468524 发表于 2013-6-8 10:22
char是一个字节的吧!你这中字符占两字节了,

char是2Byte,16bit
作者: shang1jk    时间: 2013-6-9 09:28
毕老师的视频里好像提到过这个问题,要把数组封装成一个对象,当时听得糊里糊涂得也是。后头重看下视频。
作者: librazeng    时间: 2013-6-9 11:22
本帖最后由 librazeng 于 2013-6-9 11:24 编辑

我查了半天,这实际上是个数组初始化的问题,没有初始化的数组是不能用的!
数组初始化上。new char[]{'张','飒'}当然没问题,肯定在堆里初始化了;
但写成这样{'张','飒'}是无法初始化的,数组常量必须写成char[] ch={'张','飒'}才能初始化。
char[] ch;
ch={'张','飒'};这样写也不能初始化。(错误提示:Array constants can only be used in initializers 数组常量仅能用于初始化
数组常量仅能用于初始化,是不能作为Object参数传给newInstance(Object... initargs)方法的。

资料:
一位数组初始化
1)int[] a;//声明,没有初始化
2)int[] a=new int[5];//初始化为默认值,int型为0
3)int[] a={1,2,3,4,5};//初始化为给定值   
4)int[] a=new int[]{1,2,3,4,5};//同(3)
int[] a=new int[5]{1,2,3,4,5};//错误,如果提供了数组初始化操作,则不能定义维表达式
5)int[] a;
a=new int[5];//正确,同(2)一样
int[] a;
a={1,2,3,4,5};   //错误,数组常量只能在初始化操作中使用,如(3)
6)int a[];
a[0]=1;   //错误,因为数组没有初始化,不能赋值   
a[1]=2;

作者: 刘海陆    时间: 2013-6-9 12:53
谢谢了谢谢了谢谢了谢谢了谢谢了谢谢了谢谢了谢谢了谢谢了谢谢了




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