gpt4 book ai didi

java - 编译错误字符串无法解析为变量

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

public class StrTest {

public static void main(String[] args) {
int i = 10;
Object obj =i;
if(obj instanceof String)
String s=(String) obj;
}
}

给我错误“字符串无法解析为变量”,但是如果将程序更改为

public class StrTest {

public static void main(String[] args) {
int i = 10;
Object obj =i;
String s=null;
if(obj instanceof String)
s=(String) obj;
}
}

如果我这样做的话,事实上编译得很好:

public class StrTest {

public static void main(String[] args) {
int i = 10;
Object obj =i;
if(obj instanceof String){
String s=(String) obj;
}

}
}

这也很好用。我想知道有什么语法错误。

最佳答案

我无法重现“字符串无法解析为变量”错误,您的代码给我的是这个编译错误,所以我将重点关注它:

StrTest.java:7: error: variable declaration not allowed here
String s=(String) obj;
<小时/>

在Java中

if(obj instanceof String) 
String s=(String) obj;

类似于

if(obj instanceof String) {
String s=(String) obj;
}

变量的范围仅限于代码块{..}其中声明。这意味着我们不能使用s该 block 之外的任何地方都可以变量。拥有变量的主要原因是能够在不同的地方使用它们的值,例如 int x = readSomeData(); int y = 2*x; 。但是由于我们没有在其他任何地方使用该变量,编译器将其视为不必要的代码(可能是由某些误解创建的),因此它试图通过给出错误来阻止我们编写它。

顺便说一句Andy Turner pointed out in his comment技术上可以使用 s在同一行,如

public static String someMethod(String a, String b){return a+b;}
...

if(obj instanceof String)
String s = someMethod(s = "foo", s);
// we are "using" value of s here ---^

但是编译器更关注这一事实

if(obj instanceof String) 
String s = ...;
//we still CAN'T use "s" variable *after* that line
<小时/>

您的其他案例的问题已解决

String s=null;
if(obj instanceof String)
s=(String) obj;

Object obj =i;
if(obj instanceof String){
String s=(String) obj;
}

因为有s/obj main 中声明方法,因此这些变量在 if 之后也可用部分,仅分配新值给它们。

顺便说一句,你可以明确地写 { ..}

if(obj instanceof String) {
String s=(String) obj;
}

这样的代码编译,因为编译器假设您知道 s 的范围(您可能会收到关于冗余变量的警告)

关于java - 编译错误字符串无法解析为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48900745/

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