能否创建同名变量?Android Studio中重复创建同名TextView的原理问询
能不能创建多个名称相同的变量?
这得看**作用域(Scope)**来定,不是绝对的能或者不能:
- 如果是在同一个作用域里(比如同一个方法内部、同一个类的成员变量区域),那肯定不行——编译器会直接报错,因为同一个作用域里的变量名必须唯一,不然编译器根本搞不清你要操作的是哪一个。
- 但如果是在不同的作用域里,那完全没问题:
- 比如类的成员变量和方法里的局部变量同名(这时候局部变量会“覆盖”成员变量,也就是所谓的变量遮蔽);
- 或者两个不同方法里的局部变量同名;
- 甚至是循环的每次迭代里的局部变量(这也是不同的作用域哦)。
举个Java代码的例子:
public class VariableExample { private String title = "Class Member"; public void firstMethod() { String title = "Local Var 1"; // 和成员变量同名,合法,局部变量优先 System.out.println(title); // 输出 "Local Var 1" } public void secondMethod() { String title = "Local Var 2"; // 和firstMethod里的title同名,不同作用域,合法 System.out.println(title); // 输出 "Local Var 2" } }
Android Studio中创建10个同名
wordView的TextView并添加到rootView的工作原理 我猜你应该是在循环里创建这个wordView变量吧?比如类似这样的代码:
LinearLayout rootView = findViewById(R.id.root_layout); for (int i = 0; i < 10; i++) { TextView wordView = new TextView(this); wordView.setText("Word " + (i+1)); rootView.addView(wordView); }
这个逻辑能跑通的核心还是作用域和对象引用的概念:
- 每次循环迭代时,
wordView都是一个全新的局部变量,它的生命周期只在当前这一轮循环的大括号里。每一轮循环都会创建一个独立的TextView对象,把这个对象的引用赋值给当前的wordView,然后调用addView把这个对象添加到rootView中。 - 虽然变量名都是
wordView,但它们指向的是内存里完全不同的TextView实例。当循环结束后,这些TextView对象因为被rootView(ViewGroup)持有了引用,所以不会被垃圾回收,依然会显示在界面上。 - 就算你把
wordView定义在循环外面,比如:
这时候TextView wordView; for (int i = 0; i < 10; i++) { wordView = new TextView(this); rootView.addView(wordView); }wordView是同一个变量,但每次循环它都会指向新的TextView对象——addView方法保存的是对象本身,而不是变量引用,所以最终rootView里还是会有10个独立的TextView。变量只是咱们用来临时操作对象的“工具”而已。
内容的提问来源于stack exchange,提问作者Helmi
相关产品推荐
相关产品推荐

