【问题标题】:Can assign integer value to char but can't assign integer variable to char可以将整数值分配给 char 但不能将整数变量分配给 char
【发布时间】:2014-12-14 07:20:19
【问题描述】:

为什么下面的代码编译不出来

int n = 5;
char c = n;

但以下确实编译

char c = 5;

我不是在这两种情况下都给 char 分配了一个整数值吗?

【问题讨论】:

  • 但这行得通,char c = (char) 5; 请注意,int 的范围远大于 char,因此不能保证将 int 分配给 char 是合法的。
  • 哦,有道理。所以只能归结为 char- 和 int 范围之间的差异?
  • 我的猜测是 char 是 16 位,但 int 是 32 位。因此,当将 5 分配给 char 时,它适合 16 位,所以它很酷,但 int 显然太大了。参考docs.oracle.com/javase/tutorial/java/nutsandbolts/…
  • Integer.MAX_VALUE 为 7fffffff,而 char 最高可达 '\uFFFF'
  • @Victor2748 你提到的问题不同。他指的是别的东西。

标签: java char int


【解决方案1】:

char 可以分配给 int 而无需强制转换,因为这是扩大转换。反过来,intchar 需要强制转换,因为它是一种缩小转换。

另见JLS. Chapter 5. Conversions and Promotions

【讨论】:

    【解决方案2】:

    他的问题是为什么他的代码不能编译,而不是如何做他想做的事。

    行的原因

    char c = n

    无法编译,是因为 char 的范围(-2^15 到 2^15 - 1)远小于 int 的范围(-2^31 到 2^31 - 1)。编译器看到您正在尝试将 int 分配给 char,并阻止您,因为它意识到了这一点。

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多