You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android编程:为何可在for循环内使用同名变量wordView向布局添加多个TextView?

为什么在for循环内重复定义同名的wordView变量,还能成功向布局添加十个不同的TextView控件?

我正在学习Udacity上的Google Android基础课程,看到一段代码有点困惑:在onCreate方法里,先创建了包含"one"到"ten"的ArrayList<String>,然后通过for循环向LinearLayout里添加TextView。代码里每次循环都定义了同名的wordView变量,但却能成功添加十个不同的控件,课程没解释原因,想弄明白这是为什么。

完整代码片段:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_numbers);
    ArrayList<String> words = new ArrayList<>();
    words.add("one");
    words.add("two");
    // ...
    words.add("ten");
    LinearLayout rootView = findViewById(R.id.root_view);
    for (int i = 0; i < words.size(); i++) {
        TextView wordView = new TextView(this);
        wordView.setText(words.get(i));
        rootView.addView(wordView);
    }
}

嗨,这个问题的核心其实是变量作用域的知识点,我来给你讲明白:

  • 首先,wordView是定义在for循环的代码块内部的,这意味着它的作用域只局限于当前这一次循环迭代。每次循环执行到TextView wordView = new TextView(this);时,都是在创建一个全新的局部变量——虽然名字和上一次循环的变量一样,但它们是完全独立的两个变量,指向的是内存中不同的TextView对象。

  • 其次,当你调用rootView.addView(wordView);时,LinearLayout会把这个新创建的TextView对象的引用保存到自己的控件列表里。哪怕当前循环结束后,wordView这个局部变量因为超出作用域被销毁了,但TextView对象本身因为被LinearLayout持有引用,所以不会被垃圾回收,依然存在于布局中。

简单总结一下:每次循环都新建了一个TextView对象,用wordView这个临时名字指代它,把它交给LinearLayout保管后,这个临时名字就可以被回收复用了,但对象本身已经留在布局里。十个循环下来就有十个独立的TextView对象,自然能显示出十个不同的内容啦~

内容的提问来源于stack exchange,提问作者Pekyman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:39:05