为什么即使以后会发生分配,也需要初始化String?

infoholic_anonymous

我收到以下代码的“本地变量字符串可能尚未初始化”错误。该代码本身是没有道理的,仅出于练习目的而编写。

public class StringExercise
{
    public static void main(String[] args)
    {
        String string; // initializing here fixes the issue
        for (int i = 0; i < 10; ++i)
        {
            if( (i % 4) == 2 )
            {
                string = "Number: " + i;
            }
        }
        System.out.println(string); // this is marked as wrong by Eclipse
    }
}

为了使其正常工作,初始化上面的注释中表示的String就足够了。

我的问题是为什么需要它?该方法println永远不会被赋予null,并且初始化将在循环中的条件首次返回true时进行。我是在做错什么,还是Java对程序员的错误过于谨慎?如果是后者,那么从理论角度来看又有何道理呢?

ge

我的问题是为什么需要它?

因为即使您的代码是“逻辑上”编写的,因此string确实可以在循环中进行初始化,但编译器也不知道。它所看到的是:

for (loop; elements; here)
    if (someCondition)
        string = something;

简而言之:编译器不会检查代码的逻辑;它只足够聪明以检查语法错误,但是在那之后,字节码生成本身就是“哑巴”。

并且由于Java要求在使用之前初始化所有变量,因此会出现此编译器错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么即使以后会发生分配,也需要初始化String?

来自分类Dev

Simulink:子系统初始化后会发生什么?

来自分类Dev

为什么即使base具有用户声明的构造函数,零初始化也会发生?

来自分类Dev

在《 Shiny》中,如何查看以后会发生什么动作?

来自分类Dev

在以下情况下为什么会发生初始化?

来自分类Dev

已声明但未初始化的变量:会发生什么?

来自分类Dev

在初始化期间为指针分配字符串值时,会发生什么情况?

来自分类Dev

为什么在用户为其分配值之前,我需要初始化该变量?

来自分类Dev

将堆栈分配的值装箱后会发生什么?

来自分类Dev

模块初始化中发生异常时会发生什么

来自分类Dev

为什么初始化列表优先于分配?

来自分类Dev

为什么UIColor的值在序列化/反序列化后会发生变化?

来自分类Dev

为什么需要初始化块的示例

来自分类Dev

C#-为什么需要初始化[Out]参数

来自分类Dev

为什么Java需要初始化变量?

来自分类Dev

当有多个emacs初始化文件时会发生什么?

来自分类Dev

如果用户定义的构造函数省略了数据成员的初始化,将会发生什么?

来自分类Dev

当我在C ++中对未初始化的指针调用“删除”时会发生什么?

来自分类Dev

初始化数组的两种方法。每一个会发生什么?

来自分类Dev

如果没有或只有部分字段在构造函数初始化会发生什么

来自分类Dev

如果用户定义的构造函数省略了数据成员的初始化,将会发生什么?

来自分类Dev

如果在已经初始化的变量上使用`var`会发生什么情况

来自分类Dev

如果未初始化int,会发生什么情况?

来自分类Dev

当有多个emacs初始化文件时会发生什么?

来自分类Dev

当我在子类中初始化UIView时会发生什么?

来自分类Dev

c++ 中未初始化的类成员会发生什么?

来自分类Dev

即使指针有pointee,strcpy也会发生分段错误

来自分类Dev

为什么较小的堆栈边界不会发生分段错误?

来自分类Dev

为什么我尝试复制* str = * tmp时会发生分段错误

Related 相关文章

  1. 1

    为什么即使以后会发生分配,也需要初始化String?

  2. 2

    Simulink:子系统初始化后会发生什么?

  3. 3

    为什么即使base具有用户声明的构造函数,零初始化也会发生?

  4. 4

    在《 Shiny》中,如何查看以后会发生什么动作?

  5. 5

    在以下情况下为什么会发生初始化?

  6. 6

    已声明但未初始化的变量:会发生什么?

  7. 7

    在初始化期间为指针分配字符串值时,会发生什么情况?

  8. 8

    为什么在用户为其分配值之前,我需要初始化该变量?

  9. 9

    将堆栈分配的值装箱后会发生什么?

  10. 10

    模块初始化中发生异常时会发生什么

  11. 11

    为什么初始化列表优先于分配?

  12. 12

    为什么UIColor的值在序列化/反序列化后会发生变化?

  13. 13

    为什么需要初始化块的示例

  14. 14

    C#-为什么需要初始化[Out]参数

  15. 15

    为什么Java需要初始化变量?

  16. 16

    当有多个emacs初始化文件时会发生什么?

  17. 17

    如果用户定义的构造函数省略了数据成员的初始化,将会发生什么?

  18. 18

    当我在C ++中对未初始化的指针调用“删除”时会发生什么?

  19. 19

    初始化数组的两种方法。每一个会发生什么?

  20. 20

    如果没有或只有部分字段在构造函数初始化会发生什么

  21. 21

    如果用户定义的构造函数省略了数据成员的初始化,将会发生什么?

  22. 22

    如果在已经初始化的变量上使用`var`会发生什么情况

  23. 23

    如果未初始化int,会发生什么情况?

  24. 24

    当有多个emacs初始化文件时会发生什么?

  25. 25

    当我在子类中初始化UIView时会发生什么?

  26. 26

    c++ 中未初始化的类成员会发生什么?

  27. 27

    即使指针有pointee,strcpy也会发生分段错误

  28. 28

    为什么较小的堆栈边界不会发生分段错误?

  29. 29

    为什么我尝试复制* str = * tmp时会发生分段错误

热门标签

归档