gpt4 book ai didi

java - Java中 "if"的奇怪案例

转载 作者:IT老高 更新时间:2023-10-28 20:54:13 25 4
gpt4 key购买 nike

在做某事时,我偶然发现了这段代码:

if(true) {
String message = "Assignment possible";
}

if(true)
String message = "Time to leave earth"; // error!

为什么在java中可以不带大括号写'if'条件时会出现编译错误?

错误消息似乎没有提供正确的信息:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ";" to complete Statement
String cannot be resolved to a variable
message cannot be resolved to a variable

我在这里遗漏了一些明显的东西吗?有人可以解释一下吗?

最佳答案

你不能在 if 语句中声明一个变量,除非你用花括号括住声明,因为声明必须有一个范围。

这会起作用,因为变量是在 if 语句之外声明的:

String message;
if(true)
message = "Assignment possible";
System.out.println(message)

这不会通过编译,因为变量将在与周围代码相同的范围内声明,但只有在条件为真时才会声明,所以 System.out.println(message) 在所有情况下都没有要打印的 message 变量:

if(some condition)
String message = "Time to leave earth";
System.out.println(message);

您的条件始终为真这一事实并没有什么不同,因为编译器必须支持任何 if 条件的所有结果。

现在,当你用花括号包围声明时,你将声明的变量限制在一个新的范围内:

if(some condition) {
String message = "Time to leave earth";
System.out.println(message); // this will pass compilation since message
// is guaranteed to be found in this scope
}
System.out.println(message); // this won't pass compilation, since message is not
// found in this scope

关于java - Java中 "if"的奇怪案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34432023/

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