整数作为字符串而不是整数执行?

Ind*_*igo 0 java

当我们处于for循环中时,

for(int i =0; i< 10 ; i++)
{
   System.out.println(i + 1);
}
Run Code Online (Sandbox Code Playgroud)

将执行1-10

但是,如果我System.out.println改为让我们说一个passed诸如此类的功能

for(int i=0;i<10;i++)
{
passed( "Row" + (i+1));
}
Run Code Online (Sandbox Code Playgroud)

通过的地方是

public static void passed(String check) {

System.out.println(check + "Passed");
}
Run Code Online (Sandbox Code Playgroud)

它执行

01通过11通过21通过31通过.... 41 51 61

等等

任何人都可以解释为什么它首先传递价值并跳过数学?

The*_*ind 5

System.out.println(i + 1);       --> println(int) called
System.out.println(check + "Passed"); --> println(String) is called.
Run Code Online (Sandbox Code Playgroud)

java代码:

public static void main(String[] args) {
    int check = 0;
    System.out.println(check + "Passed"); //StringBuilder operation int + string concatenated as Strings then println is called.
    System.out.println(check + 5); // int + int concatenated as int, then println is called 
}
Run Code Online (Sandbox Code Playgroud)

字节码:

 0:   iconst_0
   1:   istore_1
   2:   getstatic       #16; //Field java/lang/System.out:Ljava/io/PrintStream;
   5:   new     #22; //class java/lang/StringBuilder
   8:   dup
   9:   iload_1       
   10:  invokestatic    #24; //Method java/lang/String.valueOf:(I)Ljava/lang/Str
ing;
    // use StringBuilder and invoke println()
   13:  invokespecial   #30; //Method java/lang/StringBuilder."<init>":(Ljava/la
ng/String;)V
   16:  ldc     #33; //String Passed
   18:  invokevirtual   #35; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;  
   21:  invokevirtual   #39; //Method java/lang/StringBuilder.toString:()Ljava/l
ang/String;
   24:  invokevirtual   #43; //Method java/io/PrintStream.println:(Ljava/lang/St
ring;)V --> string println called
   27:  getstatic       #16; //Field java/lang/System.out:Ljava/io/PrintStream;
   30:  iload_1              // load value of check(int)
   31:  iconst_5           ---->  constant 5 
   32:  iadd               ----> add constant 5 and value of check and then invoke method
   33:  invokevirtual   #48; //Method java/io/PrintStream.println:(I)V --> integer println called
   36:  return
Run Code Online (Sandbox Code Playgroud)