In java if "char c = 'a' " 为什么 "c = c + 1" 不编译?
In java if "char c = 'a' " why does "c = c + 1" not compile?
我尝试编译了以下代码:
public static void main(String[] args){
for (char c = 'a'; c <='z'; c = c + 1) {
System.out.println(c);
}
}
当我尝试编译时,它抛出:
Error:(5, 41) java: incompatible types: possible lossy conversion from
int to char
问题是,如果我写 c = (char)(c + 1)
、c += 1
或 c++
。
它确实有效
我检查过,当我尝试 char c = Character.MAX_VALUE + 1;
时编译器抛出类似的错误,但我看不出 'c' 的值可以传递原始函数中的 'char' 类型最大值。
c + 1
是一个 int
,因为操作数经历 binary numeric promotion:
c
是一个 char
1
是一个 int
所以 c
必须扩大到 int
以使其兼容添加;并且表达式的结果是 int
.
类型
至于"work"的事情:
c = (char)(c + 1)
将表达式显式转换为 char
,因此它的值与变量的类型兼容;
c += 1
is equivalent toc = (char) ((c) + (1))
,所以和上一个基本一样
c++
is of typechar
,所以不需要转换。
首先,您将 c 声明为 char 而不是将其用作 int
我尝试编译了以下代码:
public static void main(String[] args){
for (char c = 'a'; c <='z'; c = c + 1) {
System.out.println(c);
}
}
当我尝试编译时,它抛出:
Error:(5, 41) java: incompatible types: possible lossy conversion from int to char
问题是,如果我写 c = (char)(c + 1)
、c += 1
或 c++
。
我检查过,当我尝试 char c = Character.MAX_VALUE + 1;
时编译器抛出类似的错误,但我看不出 'c' 的值可以传递原始函数中的 'char' 类型最大值。
c + 1
是一个 int
,因为操作数经历 binary numeric promotion:
c
是一个char
1
是一个int
所以 c
必须扩大到 int
以使其兼容添加;并且表达式的结果是 int
.
至于"work"的事情:
c = (char)(c + 1)
将表达式显式转换为char
,因此它的值与变量的类型兼容;c += 1
is equivalent toc = (char) ((c) + (1))
,所以和上一个基本一样c++
is of typechar
,所以不需要转换。
首先,您将 c 声明为 char 而不是将其用作 int