在Java中,如果“ char c ='a'”;为什么“ c = c + 1”?无法编译? [英] In java if "char c = 'a' " why does "c = c + 1" not compile?

查看:481
本文介绍了在Java中,如果“ char c ='a'”;为什么“ c = c + 1”?无法编译?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试编译以下代码:

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

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

When I try to compile, it throws:


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

Error:(5, 41) java: incompatible types: possible lossy conversion from int to char

问题是,如果我写 c =(char)(c + 1),它确实可以工作, c + = 1 c ++

The thing is, it does work if I write c = (char)(c + 1), c += 1 or c++.

我检查了当我尝试 char c = Character.MAX_VALUE + 1; 时,编译器会引发类似的错误,但是我看不到'c'的值可以传递'char'类型

I checked and the compiler throws a similar error when I try char c = Character.MAX_VALUE + 1; but I see no way that the value of 'c' can pass 'char' type maximum in the original function.

推荐答案

c + 1 int ,因为操作数经过二进制数字提升

c + 1 is an int, as the operands undergo binary numeric promotion:


  • c 字符

  • 1 int

  • c is a char
  • 1 is an int

所以 c 必须是w标识为 int 以使其兼容添加;并且表达式的结果是 int 类型。

so c has to be widened to int to make it compatible for addition; and the result of the expression is of type int.

对于工作的事物:


  • c =(char)(c + 1)将表达式显式转换为 char ,因此其值与变量的类型兼容;

  • c + = 1 等同于 c =(字符)((c)+(1)),因此与上一个基本相同。

  • c ++ 类型为 char ,因此不需要强制转换。

  • c = (char)(c + 1) is explicitly casting the expression to char, so its value is compatible with the variable's type;
  • c += 1 is equivalent to c = (char) ((c) + (1)), so it's basically the same as the previous one.
  • c++ is of type char, so no cast is required.

这篇关于在Java中,如果“ char c ='a'”;为什么“ c = c + 1”?无法编译?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆