【问题标题】:In java if "char c = 'a' " why does "c = c + 1" not compile?在java中如果“char c = 'a'”为什么“c = c + 1”不能编译?
【发布时间】:2018-11-12 10:54:55
【问题描述】:

我尝试编译以下代码:

public static void main(String[] args){
    for (char c = 'a'; c <='z'; c = c + 1) {
        System.out.println(c);
    }
}

当我尝试编译时,它会抛出:

错误:(5, 41) java: 不兼容的类型: 可能的有损转换 int转char

问题是,如果我写 c = (char)(c + 1)c += 1c++,它确实有效。

我检查过,当我尝试char c = Character.MAX_VALUE + 1; 时编译器会抛出类似的错误,但我认为'c' 的值无法在原始函数中传递'char' 类型最大值。

【问题讨论】:

    标签: java casting compiler-errors char primitive-types


    【解决方案1】:

    c + 1 是一个int,因为操作数经过binary numeric promotion

    • cchar
    • 1int

    所以c 必须扩大到int 以使其兼容添加;并且表达式的结果是int类型。

    至于“有效”的东西:

    • c = (char)(c + 1) 将表达式显式转换为 char,因此其值与变量的类型兼容;
    • c += 1is equivalent toc = (char) ((c) + (1)),所以和上一个基本一样。
    • c++is of typechar,所以不需要演员表。

    【讨论】:

    • 好答案,唯一的建议是提及为什么您可以将 int 设置为 char,但不能将 char 设置为 int(由于分配更大的数据类型改为更小的数据类型)
    • 首先,感谢您的好回答。其次,如果我理解正确,这意味着 java 需要 'c + 1' 而不是将 '1' 转换为 char ,而是将 'c' 转换为 int 以便将它们加在一起。这是因为将 int 转换为 char 可能会丢失数据吗?
    • @רעיוייסליפשיץ 是的。另请注意,即使您将两个字符加在一起,它们仍会先扩展为 int。 (byte 和 short 也是如此)。
    • @רעיוייסליפשיץ “还要注意,即使您将两个字符加在一起”,所以 c + (char) 1 不会起作用。
    • 谢谢,但这给我留下了一个问题,为什么char c = 97 + 1 有效? java 不会将97 + 1 视为int 吗?
    【解决方案2】:

    首先您将 c 声明为 char 而不是将其用作 int

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 2015-01-17
      • 2011-01-16
      • 2019-07-23
      • 2011-10-15
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多