我使用Eclipse Kepler并使用以下代码创建一个java文件:
String[] arr = new String[] {"abc", "def"};
Eclipse现在会显示警告:
未使用局部变量arr的值
如果我添加一行,则警告消失:
String[] arr = new String[] {"abc", "def"}; arr[0] = "ghi";
虽然没有读取数组的元素,但Eclipse并没有提醒我这一点。有这种行为的原因还是仅仅是一个Eclipse错误? (IntelliJ警告数组没有元素的读访问权。)
编辑: 我知道数组本身已被使用,但我希望我的IDE足够聪明,以检查数组中是否有任何元素被使用,因为数组实际上是其元素的容器。
答案 0 :(得分:2)
这不是一个错误。对于编译器,当他看到arr[0]
时,则使用该值。因为首先程序读取arr[0]
的内容,然后创建"ghi"
字符串,然后将其分配给arr[0]
。在第一种情况下,编译器注意到该变量未被引用,因此它会向您发出警告。
答案 1 :(得分:2)
检测结构的使用,读取和写入之间存在差异。 Eclipse显然只有前者(大概是因为它稍微容易一些),而其他(如IntelliJ)更复杂,可以推断出更多的信息。
这不是一个错误;他们根本没有在Eclipse中高度重视静态分析。
答案 2 :(得分:1)
Eclipse基本上不够聪明,没有意识到你编写的代码行实际上对程序的行为没有任何影响(通常这对于计算机来说很难确定)。就其而言,如果局部变量在声明后未被引用,则它是未使用的。
答案 3 :(得分:0)
在这里
String[] arr = new String[] {"abc", "def"};
arr[0] = "ghi"; // you are writing to arr
但从未读过。现在两个条件都是正确的。 arr
在代码中使用,从不阅读arr
然后IntelliJ IDEA
会说你不会在这里阅读arr
,而Ecplise从未显示过此前的警告。那不是错误。这两个是IntelliJ IDEA
和Eclipse
的功能。