在while循环中创建字符串对象有什么区别,在每次迭代中分配不同的值并在循环外创建字符串对象并在每次迭代中赋值?
答案 0 :(得分:2)
编译后,你可以看到没有区别。您可以使用javap -c
查看Java字节码。
C:\Users\y7017\Desktop>javac Test.java
C:\Users\y7017\Desktop>javac Test1.java
C:\Users\y7017\Desktop>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:\Users\y7017\Desktop>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
}
编辑:添加了从问题中删除的示例代码块。
public class Test {
public static void main(String args[]) {
int iterator = 0;
String name;
while( iterator < 10 ) {
name = "Tester";
iterator++;
}
}
}
public class Test1 {
public static void main(String args[]) {
int iterator = 0;
while( iterator < 10 ) {
String name = "Tester";
iterator++;
}
}
}
答案 1 :(得分:1)
两个代码之间的区别在于name变量的范围。 name只能在第一个代码中在while循环体中使用,而在第二个代码中可以在整个主体中使用。