String类用数组初始化问题

二哈哈哈 2017-11-15 12:44:47
加精
public class MyString {
public static void main(String[] agrs) {
char[] c= {'a','b','c'};
String s=new String(c);

}
}
这样能通过编译,但为什么改成这样会报错
public class MyString {
public static void main(String[] agrs) {
String s=new String({'a','b','c'});

}
}
...全文
10954 60 打赏 收藏 转发到动态 举报
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
Info_Qi 2018-04-09
  • 打赏
  • 举报
回复
没有把数组定义为char类型的,所以String不能接收
见青山 2018-04-09
  • 打赏
  • 举报
回复
引用 15 楼 qq_41064896 的回复:
[quote=引用 13 楼 一缕清风007的回复:]和别人探讨了一下,应该这么解释比较合理,对于形参为引用数据类型的方法,调用的时候其实是引用传递,即实际对象的引用的赋值,对于直接传{},这时候数组对象还不存在,固无法引用传递。所以{}只适用于数组的静态初始化。
1.String类另一个构造函数行参是字符串,也是引用类型,为什么可以直接传一个字符串,也是引用类型作行参 2.char[] c={'a','b','c'}; String s=new String({'a','b','c'}); 就算先声明是字符数组,这么写还是会报错,晕了[/quote] char[] c={'a','b','c'};其实是一种简化写法,完整是char[] c= new char[]{'a','b','c'};只有在定义数组和初始化数组同时完成时才可以用这种简写,{'a','b','c'}这种简写在其他地方并不被允许,new char[]{'a','b','c'}才是正确的。
通大小强 2018-04-07
  • 打赏
  • 举报
回复 1
char[] c= {'a','b','c'};这是简写形式,完整的写法是char[] c = new char[]{'a','b','c'}; 这种简写形式只允许在创建对象的时候使用,其他时候没有创建对象的意义 String s = new String();这里的String()是一个构造方法,应该向里面传递一个char[]型数组 String s = new String(new char[]{'a','b','c'});
yang_coder 2018-04-07
  • 打赏
  • 举报
回复
对,确实是语法问题。String识别不了char[]类型的,你看报错的原因,用API查一下就晓得了!
醉-风尘Oo 2018-04-04
  • 打赏
  • 举报
回复 1
String s=new String({'a','b','c'}); 这里的{'a','b','c'} 你怎么让系统知道你这是要定义成char数组
  • 打赏
  • 举报
回复
引用 6 楼 qq_41064896 的回复:
[quote=引用 1 楼 l359122505 的回复:] 语法有问题

String s = new String(new char[]{'a','b','c'});
这是java源码 public String(char value[]) { this.value = Arrays.copyOf(value, value.length); 该构造函数中,形参不是一个字符数组吗,直接传一个字符数组{‘a’,'b','c'}到该构造函数中为什么会报错,为什么还得new一个数组对象,然后再初始化赋值给这个对象才行呢?[/quote] 在js中是可以不new的。。因为js是弱类型,不告诉他类型他也能自动转换,java、C等是强类型、必须明确指明了对象的类型
天寒好入梦 2018-03-25
  • 打赏
  • 举报
回复
String的构造方法没有那种方法,所以会报错。可以看一下源码。属于语法错误
yang_coder 2018-03-24
  • 打赏
  • 举报
回复
确实,类型对不上气!你看看你报错的词汇的意思就应该明白了把
ArayChou 2018-03-07
  • 打赏
  • 举报
回复
这个看String的源码没用. java的语法就被设计成这样. 下面是 Java Language Specification原文: https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.6 An array initializer may be specified in a declaration (§8.3, §9.3, §14.4), or as part of an array creation expression (§15.10), to create an array and provide some initial values. 我尝试翻译一下: 数组initializer可以在数组定义语句中使用,可以在数组创建语句中使用,用来创建数组并给新数组提供初始值. char[] c= {'a','b','c'}; //这是数组定义语句 new char[]{'a','b','c'} // 这是数组创建语句 (String s = new String(new char[]{'a','b','c'});) String s = new String({'a','b','c'}); // 这里的 {'a','b','c'}是啥? Java语言规范中可没有说这种情况, 我们可以肯定它既不是数据定于语句,也不是数组创建语句 So....
x297910962 2018-03-06
  • 打赏
  • 举报
回复
引用 6 楼 qq_41064896的回复:
[quote=引用 1 楼 l359122505 的回复:] 语法有问题

String s = new String(new char[]{'a','b','c'});
这是java源码 public String(char value[]) { this.value = Arrays.copyOf(value, value.length); 该构造函数中,形参不是一个字符数组吗,直接传一个字符数组{‘a’,'b','c'}到该构造函数中为什么会报错,为什么还得new一个数组对象,然后再初始化赋值给这个对象才行呢?[/quote] 因为数组需要开启空间
aachen0 2018-02-27
  • 打赏
  • 举报
回复
要想明白为什么,就要去看String类的构造方法
求知若愚 2018-02-27
  • 打赏
  • 举报
回复
String string 是一个字符串 比如string = {‘abc’};里面只能有一个字符串的值。而{'a','b','c'}是三个字符的值,需要用字符数组来接受这些数据,chat[] = {'a','b','c'}
Rocketbear_lu 2018-02-13
  • 打赏
  • 举报
回复
Java源码就是这样定义的啊,没有别的办法.
qq_21912611 2018-02-09
  • 打赏
  • 举报
回复
语法糖这东西,提供给你用,但适可而止。
qq_26444359 2018-02-09
  • 打赏
  • 举报
回复
语法问题吧!!!
Forever_CFCer 2018-02-08
  • 打赏
  • 举报
回复
楼上说的很到位了,后者不符合String的数据类型,驴唇不对马嘴
蓝海之上 2018-02-08
  • 打赏
  • 举报
回复
因为{'a','b','c'}这个东西,并没有被设定数据类型,系统不知道他是数组,就像你写了一个变量temp,但是你并没有声明它,那么它就是不能使用的
a15917579239 2018-02-07
  • 打赏
  • 举报
回复
把单引号改成双引号就行啦
youyouke 2018-02-05
  • 打赏
  • 举报
回复
构造函数String(char[] value)接受的是一个字符数组对象,你将String s=new String({'a','b','c'})改为String s=new String(new char[]{'a','b','c'});就OK了。
ooo-ooo 2018-02-02
  • 打赏
  • 举报
回复
如果要String数组的话,直接写成这样不就好了吗

String[] strs = {"a1", "b2", "c3"};
加载更多回复(40)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧