Java中用循环来这样创建对象,不是应该引用重名报错吗?为什么不报?

图片描述

循环第二次的时候,就有一个重名的my了呀?为什么还是能正常运行,不报错?

阅读 5k
5 个回答

java 是块作用域
一个 {} 就是一个独立的作用域空间
每次循环的时候,都会有一个新的作用域空间
你在for循环体外是看不到my的,也是因为超出了作用域空间

你的my定义的是局部变量,每执行一次for循环都重新定义了变量。
即使你把变量放在循环外面定义,java中不会报错,只是变量存的地址会覆盖掉之前的变量。

直接上代码:

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            Thread thread = new Thread();
            thread.start();
            System.out.println(thread.getName());
        }
    }
}

// 运行结果:
// Thread-0
// Thread-1
// Thread-2

如果你要指定名字,你应该这样来做:

public class Test {
    public static void main(String[] args) {
        Thread thread = new Thread("我的线程");
        thread.start();
        System.out.println(thread.getName());
    }
}

//运行结果:
//我的线程

my指向不同的MyThread实例对象罢了

my ⇢ new MyThread() //老的
↘ new Mythread() //新的

推荐问题
宣传栏