Java 关于字符变量的增量

Java 关于字符变量的增量,java,error-handling,char,increment,auto-increment,Java,Error Handling,Char,Increment,Auto Increment,下面的代码不起作用,编译器说“从int到char的可能有损转换” public class Main { public static void main(String[] args) { char ch; ch = 65; ch=ch+1; System.out.println(ch); } } 那么为什么下面的代码工作时没有任何错误: public class Main { public static v

下面的代码不起作用,编译器说“从int到char的可能有损转换”

public class Main
{
    public static void main(String[] args) {
        char ch;
        ch = 65;
        ch=ch+1;
        System.out.println(ch);
    }
}
那么为什么下面的代码工作时没有任何错误:

public class Main
{
    public static void main(String[] args) {
        char ch;
        ch = 65;
        ch+=1;
        System.out.println(ch);
    }
}
而这两种代码的唯一区别是,在ch+=1的情况下,两种代码的区别仅仅是'ch=ch+1''ch+=1

内部类型转换将由编译器自动执行

如果ch=ch+1

开发人员必须显式地执行类型转换,否则我们将出现编译时错误

CE:可能的进动损失
找到:int
必需:字符

规则:- 如果我们应用任何算术运算符b/w 2个操作数“a”和“b”,则结果类型为max(int,a的类型,b的类型)

在Java中,do
ch=ch+1
是隐式缩小转换的一种形式。这就是编译器抛出可能的有损转换的原因。你可以在谷歌上搜索更多信息

如果结果的类型与变量的类型相同,则强制转换无效。但是,如果结果的类型比变量的类型宽,则复合赋值运算符将执行静默缩小原语转换


因为
+=
的结果转换为左侧变量的类型,所以您的操作
ch+=1将按以下方式工作:

ch += 1;
^     ^ ------- right hand (int)
+-------------- left hand  (char)
它将使用例如
((int)ch)
,将ch转换为int:

然后将
((int)ch)
1
相加,并将其转换为char以返回原始类型,所有这些可以是:

ch = (char) ((int) ch + 1);

在java中,char变量的大小为:2字节, 而int变量的大小为:4字节

注意:一个字节由8位组成,最多可容纳256个数值

在第一个代码段中,当您执行(ch+1)时,编译器默认认为1是一个int值,因此也将最终值视为int。然后编译器尝试将最终值放入ch中,这是一个字符。。。行动。。它试图将一个由4字节表示的值放入一个大小为2字节的变量中

如果您这样做,可以解决此问题: Ch=(字符)(Ch+1)

在第二个代码段中,您将直接递增变量ch,无论其大小如何。因此,您不会遇到试图在char变量中拟合int值的问题

检查这一点,我不认为
Ch=Ch+(字节)1
会起作用(即使更正了大写)。
ch = (char) ((int) ch + 1);