Java 有人能解释为什么会发生这种错误吗?(a==2)在这里已经是真的了 类示例{ 公共静态void main(字符串参数[]){ INTA=2; 字符b,c,d; b=(a

Java 有人能解释为什么会发生这种错误吗?(a==2)在这里已经是真的了 类示例{ 公共静态void main(字符串参数[]){ INTA=2; 字符b,c,d; b=(a,java,Java,对于b和c,您使用的是if-else,因此编译器确信在print语句之前会给b和c分配一些值。但是对于d,编译器不确定是否有if条件为真,d是否会被初始化。如果如果条件均为真,您仍在打印de>d,它没有设置值。如果有可能,您需要为局部变量设置一个默认值,在它设置值之前尝试访问它。但是a==2是真的……不是吗?它与char无关,但事实是d可以保留uninitialized@SashinSahasra是的,但是com皮尔不知道that@Sashin编译器不知道最终的if将始终执行,如果使用else则

对于b和c,您使用的是if-else,因此编译器确信在print语句之前会给b和c分配一些值。但是对于d,编译器不确定是否有if条件为真,d是否会被初始化。

如果
如果
条件均为真,您仍在打印de>d
,它没有设置值。如果有可能,您需要为局部变量设置一个默认值,在它设置值之前尝试访问它。但是a==2是真的……不是吗?它与
char
无关,但事实是
d
可以保留uninitialized@SashinSahasra是的,但是com皮尔不知道that@Sashin编译器不知道最终的
if
将始终执行,如果使用
else
则不会有问题,因为
if
else
将始终执行,编译器可以确认。但是(a==2)那么为什么编译器不将变量初始化为d呢?
class Example {
    public static void main(String args[]){
        int a=2;
        char b,c,d;
        b = (a<2)? 'f' : 'g';                   //1
        if(a<2) c = 'h'; else c = 'i';          //2
        if(a<2) d = 'j';                        //3
        if(a>2) d = 'k';                        //4
        if(a==2) d = 'l';           //5
        System.out.println(b+","+c+","+d);      //6

    }  
}