从数组分配值时字符数组编译时错误

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

尝试使用更大的值,1234555555

【讨论】:

@Kick 是的。它在 JLS 中,请稍等。我在打电话。 @KickButtowski 它是java规范语言,更像是java的规则手册 @game 这仍然是一个常量表达式,其结果保证适合一个字符。 @Kick Yes 加法运算意味着+ 应用于数字类型。二进制数字表示涉及两个数字(数值)。 @kick 当应用于数值类型时,+ 运算符是二进制数值加法运算符。当应用于至少一个String 类型的操作数时,它是字符串连接运算符。请浏览我链接的 JLS。

以上是关于从数组分配值时字符数组编译时错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 RavenDB 从多个字符串数组创建扇出索引的编译错误

在字符串和结构数组中查找动态内存分配错误

数组中的字符串仅在尝试获取单个值时返回未定义?

C++ 字符数组分配错误

C指针:指向一个固定大小的数组

当数组只有一个值时处理条件逻辑,即使它是一个空字符串?