从数组分配值时字符数组编译时错误
Posted
技术标签:
【中文标题】从数组分配值时字符数组编译时错误【英文标题】:Char array compile time error upon assign a value from array 【发布时间】:2014-10-01 12:54:38 【问题描述】:所以我有这个代码
char [] a = 'a','b','c';
char c = 'a' + 'b'; //works
char c2 = 98 + 97; //works
char c3 = a[0] + a[1]; //compile time error
所以它们都是相同的功能,但是在获取和使用数组值时,它会给我一个编译时错误。这是什么原因??
The result of the additive operator applied two char operands is an int.
那我为什么可以这样做?
char c2 = (int)((int)98 + (int)97);
【问题讨论】:
@ScaryWombat 上面有评论。我认为他是在说为什么它们都可以工作,但数组部分却不行 @ScaryWombat 需要char
找到 int
@ScaryWombat 线程“main”java.lang.RuntimeException 异常:无法编译的源代码 - 不兼容的类型:从 int 到 char 的可能有损转换
@Rod_Algonquin 我的眼睛一定很糟糕——评论在哪里?
@ScaryWombat char c3 = a[0] + a[1]; //compile time error
【参考方案1】:
The result of the additive operator applied two char
operands is an int
.
对操作数执行二进制数字提升。 数值操作数上的加法表达式的类型是其操作数的提升类型
前两个是常量表达式,其结果值为int
,可以安全地分配给char
。
第三个不是常量表达式,所以编译器不能保证。
同样
那我为什么可以这样做?
char c2 = (int)((int)98 + (int)97);
这也是一个常量表达式,结果可以放入char
。
尝试使用更大的值,12345
和 55555
。
【讨论】:
@Kick 是的。它在 JLS 中,请稍等。我在打电话。 @KickButtowski 它是java规范语言,更像是java的规则手册 @game 这仍然是一个常量表达式,其结果保证适合一个字符。 @Kick Yes 加法运算意味着+
应用于数字类型。二进制数字表示涉及两个数字(数值)。
@kick 当应用于数值类型时,+
运算符是二进制数值加法运算符。当应用于至少一个String
类型的操作数时,它是字符串连接运算符。请浏览我链接的 JLS。以上是关于从数组分配值时字符数组编译时错误的主要内容,如果未能解决你的问题,请参考以下文章