在Java中创建循环内的对象

时间:2018-03-19 08:51:45

标签: java while-loop global-variables

在while循环中创建字符串对象有什么区别,在每次迭代中分配不同的值并在循环外创建字符串对象并在每次迭代中赋值?

2 个答案:

答案 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
}

编辑:添加了从问题中删除的示例代码块。

Test.java

public class Test {
    public static void main(String args[]) {
        int iterator = 0;
        String name; 
        while( iterator < 10 ) {
            name = "Tester";
            iterator++;
        }
    }
}

Test1.java

public class Test1 {
    public static void main(String args[]) {
        int iterator = 0;
        while( iterator < 10 ) {
            String name = "Tester";
            iterator++;
        }
    }
}

答案 1 :(得分:1)

两个代码之间的区别在于name变量的范围。 name只能在第一个代码中在while循环体中使用,而在第二个代码中可以在整个主体中使用。