当前位置: 首页 > 面试题库 >

为什么不能在if语句中声明变量?

翟善
2023-03-14
问题内容

以下Java代码无法编译。

int a = 0;

if(a == 1) {
    int b = 0;
}

if(a == 1) {
    b = 1;
}

为什么?在没有b先声明的情况下,没有代码路径可导致程序将1分配给该路径。

我想到b的范围可能仅限于第一条if陈述,但后来我不明白为什么。如果我真的不想b不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。

(您可能想争论一下,我不可以在第二条if语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。)


问题答案:

为什么?如果没有先声明,没有代码路径可以导致程序将1分配给b。

没错,但是编译器不知道这一点。编译器不执行代码。编译器仅转换为字节码,而不计算表达式。



 类似资料:
  • 问题内容: 我刚刚开始学习go lang,而对于在go lang中声明变量感到困惑 例如我已经声明,里面if … else语句。 但是终端出现错误 好像我在If语句中声明的任何内容都不起作用…我该如何解决? 问题答案: 因为变量仅在声明它们的范围内定义: 去玩 之间的区别,并是仅仅是分配和对变量的声明和分配新建分配FY语法 这个: 等效于: 您可能想要的是:

  • 在Java,如果我们运行: 它将抛出: 但是,在php中,如果我们运行: 它将打印%1。 我怀疑这是否是因为Java是强类型语言,而php是弱类型语言。能不能有人给出一个更深层次、更低层次的解释?

  • 问题内容: 由于从未声明@A,因此sql server应该抛出错误,但是不会。这是为什么? 谢谢 问题答案: SQL Server没有块级变量作用域。 每批/存储的过程等 从MSDN(我的粗体) 变量的范围是可以引用该变量的Transact-SQL语句的范围。变量的范围从声明的点一直持续到声明它的 批处理 或 存储过程 的末尾。

  • 我正在标准中寻找对这一事实的正式解释。我找到了3.9.1/9所说的,并试图用该部分给出解释。 第3.9.1/9节,N3797: void类型有一组空值。void类型是不完整的类型,无法完成。它用作不返回值的函数的返回类型。任何表达式都可以显式转换为cv void类型(5.4)。void类型的表达式只能用作表达式语句(6.2)、逗号表达式的操作数(5.18)以及?的第二个或第三个操作数:(5.16)

  • 问题内容: 函数声明如何处理? 此示例在Chrome和Firefox中产生不同的输出。Chrome输出,而FF输出。 问题答案: 当问这个问题时,ECMAScript5(ES5)盛行。在ES5的严格模式下,函数声明不能​​嵌套在一个块中,如问题所示。在非严格模式下,结果是不可预测的。不同的浏览器和引擎针对如何处理块内的函数声明实现了自己的规则。 许多浏览器都支持ECMAScript2015(ES2

  • 首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的