示例代码:
public class SalCal {
public static void main(String[] args) {
int a=0;
if (a > 1)
String string = "fds";//hint:not a statement
}
}
Intellij IDEA暗示String string = "fds";
不是声明
但是,如果我在String string = "fds";
的任一方面添加大括号,它就不再像以前那样提示了。为什么呢?
答案 0 :(得分:6)
Intellij IDEA表示,因为它不是声明。这是一个声明 1 。
当您添加大括号时,您将其转换为块语句...这是一个声明。
但这就是问题。如果这段代码合法,那将毫无用处。
if (a> 1)
String string = "fds";
为什么呢?因为声明的范围必须在if
语句结束时结束。您将声明一个无法使用的变量。
以下是两种选择:
1)此版本声明if-block
中的变量 if (a> 1) {
String string = "fds";
// you can use 'string' here
}
// ... but not here, because it is now out-of-scope.
2)此版本在if语句之前声明并初始化变量,并在if:
中为其分配一个新值。 String string = "asdf";
if (a> 1) {
string = "qwerty"; // assignment, not declaration
}
// OK to use 'string' here.
1 - 实际上,Intellij IDEA编译器正在“松散于事实”。实际上,JLS称之为“局部变量声明语句”。所以它在技术上是一个“声明”......但它是一种特殊的类型,不能在所有可以使用的普通环境中使用。
答案 1 :(得分:1)
一个局部变量,以下之一:
你的情况不属于上述情况,所以你得到了:
==
有很多解决方案:
error: variable declaration not allowed here
string
语句中添加括号。答案 2 :(得分:0)
行String string = "fds";
是带有初始化程序的声明,而不是语句(例如方法调用或对现有变量的赋值)。当你使用大括号时,你引入了一个新的块作用域,在这个作用域中声明块局部变量是有意义的,但是在一个简单的“then”中,声明一个变量是完全没用的。
答案 3 :(得分:0)
1)一
String string =" asdf&#34 ;;
//如果你没有花括号,你就像
一样// if中的所有内容都将遵循条件
if(a> 1)
//声明
2)二
//你使用那些{}来阻止你的陈述 字符串字符串=" asdf&#34 ;;
if(a> 1){//这是一个声明;
//语句字符串
}