for(;;)和while(true)的区别
(一)Java中 for(;;)和while(true)都是死循环。
1.0 代码: for
- @Test
- public void test(){
- for(;;){
- System.out.println("for"+"+++");
- }
- }
编译后的字节码:
- public void test();
- flags: ACC_PUBLIC
- Code:
- stack=2, locals=1, args_size=1
- 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
- 3: ldc #3 // String for+++
- 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
- 8: goto 0
- LineNumberTable:
- line 18: 0
- LocalVariableTable:
- Start Length Slot Name Signature
- 0 11 0 this Lcom/jj/jingcai/MyTest;
- StackMapTable: number_of_entries = 1
- frame_type = 0 /* same */
- RuntimeVisibleAnnotations:
- 0: #17()
2.0 while(true)
- @Test
- public void test(){
- while (true){
- System.out.println("while"+"---");
- }
- }
编译后的字节码:
- public void test();
- flags: ACC_PUBLIC
- Code:
- stack=2, locals=1, args_size=1
- 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
- 3: ldc #3 // String while---
- 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
- 8: goto 0
- LineNumberTable:
- line 18: 0
- LocalVariableTable:
- Start Length Slot Name Signature
- 0 11 0 this Lcom/jj/jingcai/MyTest;
- StackMapTable: number_of_entries = 1
- frame_type = 0 /* same */
- RuntimeVisibleAnnotations:
- 0: #17()
总结:两者都是用于 无限循环的判断语句。且编译后的字节码 完全相同。
但是:注意 这是 依赖于编译器优化后的结果。--->有些不优化的编译器-->则会体现出不同。for(;;)的指令就会少一些。而while(true)会用到寄存器,就会多一些指令。
eg:
上一篇:
IDEA上Java项目控制台中文乱码