res*_*a87 12
如果在if
语句中定义变量,那么它只会在if
语句的范围内可见,其中包括语句本身和子语句.
if(...){
String a = "ok";
// a is visible inside this scope, for instance
if(a.contains("xyz")){
a = "foo";
}
}
Run Code Online (Sandbox Code Playgroud)
您应该在范围外定义变量,然后在if
语句中更新其值.
String a = "ok";
if(...){
a = "foo";
}
Run Code Online (Sandbox Code Playgroud)
您需要区分变量声明和赋值。
\n\nString foo; // declaration of the variable "foo"\nfoo = "something"; // variable assignment\n\nString bar = "something else"; // declaration + assignment on the same line\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您尝试使用未分配值的声明变量,例如:
\n\nString foo;\n\nif ("something".equals(foo)) {...}\n
Run Code Online (Sandbox Code Playgroud)\n\n您将收到编译错误,因为该变量未分配任何内容,因为它只是声明了。
\n\n在您的情况下,您在条件块内声明变量
\n\nif (someCondition) {\n String foo;\n foo = "foo";\n}\n\nif (foo.equals("something")) { ...\xc2\xa0}\n
Run Code Online (Sandbox Code Playgroud)\n\n所以它只在该块内“可见”。您需要将该声明移到外部并以某种方式为其分配一个值,否则您将收到条件赋值编译错误。一个例子是使用else
块:
String foo;\n\nif (someCondition) { \n foo = "foo";\n} else {\n foo = null;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n或在声明时指定默认值(null?)
\n\nString foo = null;\n\nif (someCondition) {\n foo = "foo";\n}\n
Run Code Online (Sandbox Code Playgroud)\n