字符串数组:'在'i ++'处更改的值永远不会被使用'

时间:2017-08-30 10:19:47

标签: java

这是我的代码:

String[] queries = new String[2];
int i = 0;
Boolean result;
queries[i++] = "<query 1>";
queries[i++] = "<query 2>"; //Warning shown here
result = dbOpenHelper.ExecuteMyTransaction(queries);

第二个i++突出显示,并显示警告'在'i ++'处更改的值从未使用过'。此代码由另一个人编写,据我所知,此处<query 1><query 2>分别分配给queries[1]queries[2],但之后必须显示错误,数组的大小为2.没有错误,这让我对这里发生的事情感到困惑。我可以安全地删除第二个作业,或将第一个作业更改为queries[i]吗?

5 个答案:

答案 0 :(得分:8)

代码是正确的,您可以放心地忽略此警告,或者只用 .text{ display: inline-block; vertical-align: middle; } 替换带下划线的i++

此警告只是表示由于在该范围内没有进一步使用i变量,因此增加或不增加其值不会产生任何影响,而且毫无意义。

答案 1 :(得分:6)

  

i ++表示后增量,这意味着首先获取并使用i值,然后递增。

您的代码是正确的,您可以忽略此警告并尝试使用以下代码来摆脱此警告

String[] queries = new String[2];
int i = 0;
Boolean result;
queries[i++] = "<query 1>";
queries[i] = "<query 2>"; //change this here
result = dbOpenHelper.ExecuteMyTransaction(queries);

答案 2 :(得分:4)

第二个i++也可能是i,因为i不再被检查。 后增量i++将返回当前值i,然后递增i。

答案 3 :(得分:4)

  
      
  • 但是它必须显示错误,因为数组大小为2。
  •   

如果您尝试访问queries[2],您肯定会了解What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?。虽然您当前的代码不是这种情况。

  
      
  • 没有错误,这让我对发生的事情感到困惑   这里。
  •   

在编译时不检查数组边界,而是在运行时为运行时分配大小的运行时。有关Why isn't the ArrayIndexOutOfBoundsException a compile time error?

的更多详情
  
      
  • 我可以安全地删除第二个作业,或将第一个作业更改为   查询[I]?
  •   

您可以删除分配,或者如其他人所述,仅在第一个分配中使用post increment operator

queries[i++] = "<query 1>"; // index accessed is 0 here
queries[i] = "<query 2>"; // i=1 here
  
      
  • 价值在&#39; i ++&#39;永远不会使用&#39;
  •   

这是编译时警告,因为编译器希望您在i上对操作其值的同一范围内执行操作。

答案 4 :(得分:1)

  

++ i递增i然后使用变量。 (预增量)

     

i ++使用然后递增变量。(后递增)

在你的代码中,它是后增量操作。

queries[i++] = "<query 1>"; // It's equivalent to queries[0] = "<query 1>";
queries[i++] = "<query 2>"; // It's equivalent to queries[1] = "<query 2>";

因此,您的代码应该按预期正常工作。但是,将第二个查询用作queries[i] = "<query 2>";

总是有用的