Java 字符串数组:';该值在';i++';从未使用过';

Java 字符串数组:';该值在';i++';从未使用过';,java,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); String[]查询=新字符串[2]; int i=0; 布尔结果; 查询[

这是我的密码:

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);
String[]查询=新字符串[2];
int i=0;
布尔结果;
查询[i++]=“”;
查询[i++]=“”//此处显示的警告
结果=dbOpenHelper.ExecuteMyTransaction(查询);

第二个
i++
突出显示,并显示警告“在'i++'处更改的值从未使用”。这段代码是另一个人写的,据我所知,这里
分别被分配到
查询[1]
查询[2]
,但它必须显示一个错误,因为数组的大小为2。没有错误,这让我对这里发生的事情感到困惑。我是否可以安全地删除第二个赋值,或者将第一个赋值更改为
querys[I]

代码是正确的,您可以安全地忽略此警告或将带下划线的
I++
替换为
I

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

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);
String[]查询=新字符串[2];
int i=0;
布尔结果;
查询[i++]=“”;
查询[i]=“”//在这里换这个
结果=dbOpenHelper.ExecuteMyTransaction(查询);

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

  • 但是它必须显示一个错误,因为数组的大小是2
如果您尝试访问
查询[2]
,您肯定会知道。但您当前的代码并非如此

  • 没有错误,这让我对发生的事情感到困惑 在这里
数组边界不会在编译时检查,而是在运行时检查,因为大小是在运行时分配的。更多详情

  • 我可以安全地删除第二个任务,或者将第一个任务更改为 询问[我]
您可以删除该赋值,或如其他人所述,仅在第一个赋值中使用后增量运算符作为

queries[i++] = "<query 1>"; // index accessed is 0 here
queries[i] = "<query 2>"; // i=1 here
查询[i++]=“”;//此处访问的索引为0
查询[i]=“”;//这里i=1
  • 在“i++”处更改的值从未使用过
这是一个编译时警告,因为编译器希望您在处理其值的同一范围内进一步对
i
执行操作

++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>";
查询[i++]=“”;//相当于查询[0]=“”;
查询[i++]=“”;//相当于查询[1]=“”;

因此,您的代码应该可以正常工作。然而,将第二个查询用作
查询[i]=''总是很好的

使用这个:查询[i]=“”
被分配给
查询[1]
查询[2]
数组索引从0开始,值将被分配给
查询[0]
查询[1]
。另请看,这是否意味着我在完成作业后会递增?是的
i++
表示后期增量,这意味着首先获取并使用
i
值,然后递增。如果您想在使用前将其递增,那么应该使用
++i
(递增前)。它不会编译失败,但这并不能改变
querys[i++]=“
中的
i++
毫无意义的事实。正如其他答案所述,如果他能将其更改为querys[i]=”;但是,由于这段代码是遗留的,所以它本身不会造成任何伤害。但最好改为查询[i]=”;