在 while 循环中创建字符串对象,在每次迭代中
分配不同的值,在循环外创建字符串对象并在每次迭代中赋值有什么区别?
编译后,如您所见,没有区别。您可以使用 javap -c
查看 Java 字节码。
C:Usersy7017Desktop>javac Test.java
C:Usersy7017Desktop>javac Test1.java
C:Usersy7017Desktop>javap -c Test
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: bipush 10
5: if_icmpge 17
8: ldc #2 // String Tester
10: astore_2
11: iinc 1, 1
14: goto 2
17: return
}
C:Usersy7017Desktop>javap -c Test1
Compiled from "Test1.java"
public class Test1 {
public Test1();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: bipush 10
5: if_icmpge 17
8: ldc #2 // String Tester
10: astore_2
11: iinc 1, 1
14: goto 2
17: return
}
编辑:添加了从问题中删除的示例代码块。
测试.java
public class Test {
public static void main(String args[]) {
int iterator = 0;
String name;
while( iterator < 10 ) {
name = "Tester";
iterator++;
}
}
}
测试1.java
public class Test1 {
public static void main(String args[]) {
int iterator = 0;
while( iterator < 10 ) {
String name = "Tester";
iterator++;
}
}
}
两个代码之间的区别在于 name 变量的作用域。name 只能在第一个代码的 while 循环主体中使用,而在第二个代码的整个主体中使用。