当我们处于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
等等
任何人都可以解释为什么它首先传递价值并跳过数学?
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)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |