在java中如果“char c = 'a'"为什么“c = c + 1"?不编译?

In java if quot;char c = #39;a#39; quot; why does quot;c = c + 1quot; not compile?(在java中如果“char c = a为什么“c = c + 1?不编译?)
本文介绍了在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 += 1c++.

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 是一个 char
  • 1 是一个 int
  • c is a char
  • 1 is an int

所以 c 必须扩展为 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 = (char) ((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"?不编译?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)