这是我的代码:
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]
吗?
答案 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>";