gpt4 book ai didi

java - 我是否必须在与 Java 中声明变量相同的范围内初始化变量?

转载 作者:行者123 更新时间:2023-12-01 07:34:12 25 4
gpt4 key购买 nike

我遇到了这个非常简单的代码,在我看来,我们必须在声明它的同一范围内初始化一个变量,如果是这样,我很困惑为什么。这是一个例子:

class Test
{
public static void main (String[] args)
{
int x; // if initialize x to anything everything works fine

for (int i = 0; i < 3; i++)
{
x = 3;
System.out.println("in loop : " + x);
}

System.out.println("out of loop " + x); // expect x = 3 here, but get an error
}
}

上面的代码产生这个错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
The local variable x may not have been initialized

我很困惑为什么会发生这种情况。我预计int x告诉 Java 编译器我将创建一个 int变量x在声明 x 的范围内,然后我初始化了x为 for 循环中的值 3。导致错误的原因是什么?我错过了什么?

顺便说一句,非常相似的代码在 C++ 中的工作方式与我预期的一样

#include<iostream>

using namespace::std;

int main()
{
int x;

for(int i = 0; i < 3; i++)
{
x = 3;
cout<<"in loop : "<<x<<endl;
}

cout<<"out of loop : "<<x<<endl; //expect x = 3 here

return 0;
}

我使用 eclipse for java 和 Code::Blocks for C++。

最佳答案

编译器不确定您将进入循环。所以x可能永远不会被初始化。

考虑:

class Test
{
public static void main (String[] args)
{
int x; // x has no value

for (int i = 0; i < 0; i++) // Bogus bounds -> never enters loop.
{
x = 3; // Never happens
System.out.println("in loop : " + x);
}

System.out.println("out of loop " + x); // x has no value here!!
}
}

继续将x初始化为某物。如果确定将进入循环并分配一个值,那么不必担心初始化值是什么。否则,您现在就会明白为什么需要初始化。

关于java - 我是否必须在与 Java 中声明变量相同的范围内初始化变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14169075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com