Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 好奇于++;和双重演员_Java_Casting_Increment - Fatal编程技术网

Java 好奇于++;和双重演员

Java 好奇于++;和双重演员,java,casting,increment,Java,Casting,Increment,所以我再次查看代码,发现了这个 public ProtoTableShapedRecipe addRecipe(ItemStack stack, Object ... varargs){ int i = 0; ... ... ... String[] astring = (String[])((String[])varargs[i++]); } 我想知道的是,为什么需要对字符串[]进行两次强制转换,当将变量I传递给varargs[]时,它会认为值为1并

所以我再次查看代码,发现了这个

   public ProtoTableShapedRecipe addRecipe(ItemStack stack, Object ... varargs){
   int i = 0;
   ...
   ...
   ...
   String[] astring = (String[])((String[])varargs[i++]);
   }

我想知道的是,为什么需要对字符串[]进行两次强制转换,当将变量
I
传递给
varargs[]
时,它会认为值为1并使
I
1,还是只在传递时将1添加到
I
,而
I
保持在0。

,首先在数组索引中使用
i
值(因此
varargs[0]
),然后增加
i
,以便在下一行
i
1

接下来,因为
varargs
或键入
Object[]
。只有当它需要
字符串[]
(并且您忘记了开头的
{
)时,才可以安全地使用该强制转换

public ProtoTableShapedRecipe addRecipe(ItemStack stack,
        String[]... varargs) {
    int i = 0;
    // ...
    String[] astring = varargs[i++]; // <-- varargs[0]
    // i = 1
}
public ProtoTableShapedRecipe addRecipe(ItemStack堆栈,
字符串[]…varargs){
int i=0;
// ...

字符串[]astring=varargs[i++];//此处不需要双重转换。只需一次转换即可:

String[] astring = (String[])varargs[i++];

现代IDE在这一行发出了一个不必要的施法警告。

我认为第一个
String[]
是施法
varargs
,而第二个
String[]
是施法
varargs[I++]
@tang,不。两者都用于施法
varargs[I++]
。其中一个是无用的。好吧。这对我来说是有意义的。至于施法,这是代码,
对象有更多…
还有另一个部分调用它,其中
String
String[]
可以传递。它检查
if
语句中的
instanceof
是否存在,并相应地更改强制转换。我理解强制转换的意义。我只是不知道为什么它是双精度的,就像后来的双精度一样,它是为
string s2=(string)varargs[I++]这样的字符串强制转换的
所以它把我甩了。啊,好吧。我就是这么想的,也许是那个人把它放在那里是因为它对他们大喊大叫。没想到会有什么原因。我一直认为,一旦它被投下,它就被投下了。