【问题标题】: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

标签: java arrays char


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
相关资源
最近更新 更多