Java:错误:变量可能尚未初始化

标签 java

我正在学习 Java,但遇到此错误。我知道这个问题已经被问过几次(很多次),但似乎没有一个答案能回答我的问题。代码主体是:

String[] number = {"too small", "one", "two", "three", "four", "too large"};
int i;
if(num<1){
    i=0;
}
if(num==1){
    i=1;
}
if(num==2){
    i=2;
}
if(num==3){
    i=3;
}
if(num==4){
    i=4;
}
if(num>4){
    i=5;
}
return number[i];

其中变量“num”是先前声明、初始化和给定的。 我得到的错误是:“变量‘i’可能尚未初始化”并指向最后一行(返回 number[i];)。

问题是,如果我声明“i”并立即分配一个值(int i=0;),则代码运行良好。但是,如果我不分配值,即使在每个“if”之后分配了可能的值,也会收到错误。

例如,我在使用 C 语言时就不会出现此类错误。

谢谢

最佳答案

Java 不会分析 if block 的逻辑来确定您的 if 语句之一将运行并向 i 赋值。它很简单,它可以看到没有 if 语句运行的可能性。在这种情况下,在使用之前不会为 i 分配任何值。

Java不会给局部变量赋予默认值,即使它给类变量和实例变量赋予默认值。 Section 4.12.5 of the JLS涵盖这个:

Every variable in a program must have a value before its value is used:

A local variable (§14.4, §14.14) must be explicitly given a value before it is used, by either initialization (§14.4) or assignment (§15.26)

在声明时为 i 分配某种默认值,以满足编译器的要求。

int i = 0;
// Your if statements are here.
return number[i];

关于Java:错误:变量可能尚未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57652212/

相关文章:

java - 在java中将列表的列表转换为json对象

java - 为什么,如果两个对象根据 equals 不相等,则不需要返回不同的 hashCode 值?

java - 在 Play 服务 9.4.0 中访问 AdvertisingIdClient

java - 在按下/选择时操作 JToggleButton 的 ImageIcon

java - 在 View 的 onCreateContextMenu 中创建上下文菜单时,AdapterView.AdapterContextMenuInfo 为 null

java - 如何在 Android 中加密/解密发送/接收的消息?

java - 使用 java 从 servlet 获取标签的值

java - 在 @Configuration 类中的 Spring 中设置注释驱动的事务

java - 授予特定 Java Swing 应用程序完全权限

java - 为什么 getcontentpane() 未定义?