Java 有人能解释为什么会发生这种错误吗?(a==2)在这里已经是真的了 类示例{ 公共静态void main(字符串参数[]){ INTA=2; 字符b,c,d; b=(a
对于b和c,您使用的是if-else,因此编译器确信在print语句之前会给b和c分配一些值。但是对于d,编译器不确定是否有if条件为真,d是否会被初始化。如果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则
如果条件均为真,您仍在打印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
}
}