Java中用循环来这样创建对象,不是应该引用重名报错吗?为什么不报?
迷茫
迷茫 2017-04-18 09:34:09
[Java讨论组]

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
高洛峰

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

ringa_lee

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

PHP中文网

直接上代码:

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());
    }
}

//运行结果:
//我的线程
伊谢尔伦

简单来说:对象有作用域
类似的问题:https://segmentfault.com/q/1010000004638990

大家讲道理

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号