Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中处理未初始化的字符串_Java_Object_Compiler Errors_Initialization - Fatal编程技术网

在Java中处理未初始化的字符串

在Java中处理未初始化的字符串,java,object,compiler-errors,initialization,Java,Object,Compiler Errors,Initialization,这是我作为家庭作业正在做的一个小程序的一部分: public Exam maxGrade() { Node p = firstNode; int max = 0; String name; while (p!=null) { if (p.info.getGrade()>max) { max = p.info.getGrade(); name = p.info.getName();

这是我作为家庭作业正在做的一个小程序的一部分:

public Exam maxGrade() {
    Node p = firstNode;
    int max = 0;
    String name;
    while (p!=null) {
        if (p.info.getGrade()>max) {
            max = p.info.getGrade();
            name = p.info.getName();
        }
        p = p.next;
    }

    if (name==null)
        return null;
    else
        return searchByName(name);
}
因此,当我继续编译时,编译器输出以下消息:

java:127:错误:变量名可能尚未初始化 if(name==null)

将第四行替换为:

String name = null;
现在,我可以从中看出一些逻辑。但我真的很想了解问题背后的工作原理。 我的意思是,如果编译器在代码中看到您正在使用某个变量,那么它检查该变量是否已初始化似乎是合理的,但我认为我没有做任何需要初始化该变量的事情


根据源代码,比如当我简单地声明我的字符串(或任何其他对象)变量“name”时,它已经指向null。那么,为什么仅仅检查该值是否为空就被视为异常呢?编译器会考虑错误吗?除了分配之外,我对未初始化的变量做了什么?

默认情况下,对象类型的字段初始化为NULL。默认情况下,数组成员也初始化为null

局部变量不是-它们必须显式初始化

这是一件好事。未初始化的变量通常表示错误

来自Java语言规范第4章:

局部变量(§14.4,§14.14)在使用前必须通过初始化(§14.4)或赋值(§15.26)明确给定一个值,其方式可以使用明确赋值规则(§16)进行验证


如果要对对象的值进行任何假设,编译器要求您将对象初始化为
null
。这只是一个(非常有用的)预防措施。

附录:编译器无法检查程序的语义。即使您知道变量在首次使用之前已初始化,编译器也不能

考虑以下功能:

public boolean mod2(int i){
    if(i % 2 == 0){
        return true;
    }
    if(i % 2 != 0){
        return false;
    }
}

我们都知道这个方法总是返回true或false。相反,编译器不能确保总是有一个返回值,因为他必须知道只有这两个结果。因此,编译器将报告一个关于缺少return语句的错误。

不,这不是它(您提供的链接)所说的。正如在接受的答案中所述,局部变量未初始化,因此出现错误。在众多其他变量中,可能存在重复。还请注意,如果不小心,null可能会导致某些字符串函数出现一些问题。因此,有时我会改为
String foo=“
。请注意,不能将对象初始化为null,但可以将对象类型的引用初始化为null。