我是一个完全的初学者,已经开始通过YouTube教程和谷歌搜索来学习Kotlin。当我学习一个教程时,他在MainActivity
类中创建了三个变量作为以下
class MainActivity : AppCompatActivity() {
var firstName= "David"
var secondName= "Tal"
var age = 20
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
接下来,他在一个私有函数中使用创建的变量,如下所示:
private fun nameRating(){
if(firstName == secondName){
Toast.makeText(applicationContext,"10/10", Toast.LENGTH_LONG).show()
}else{
Toast.makeText(applicationContext,"5/10", Toast.LENGTH_LONG).show()
}}
我按照这个例子在安卓工作室中重新创建了它,但if条件触发了,我觉得这很奇怪。经过调试,发现firstName
和secondName
都是"0"
。我认为这些变量应该是全局的,但令人困惑的是,为什么它不起作用,因为age
变量是正确的。
如果我对这件事的运作方式完全错误,请对此事作出任何解释/澄清。
别担心,在这种情况下,Kotlin并没有在你背后做任何奇怪或神奇的事情。
Kotlin中的var
关键字表示您正在声明一个变量,但该变量的作用域不是";全球";。作用域是在其中声明变量的代码块。在您的案例中,您在类作用域中声明了3个变量,因此这些都是类变量,可以从类MainActivity
中的任何位置访问它们。由于它们也是public
(默认情况下,Kotlin声明是公共的,除非您指定了不同的访问修饰符,如private
、protected
等(,只要调用代码引用了此类的实例,这3个变量也可以从类外(或从子类(访问。这在Java中也是一样的,如果某个东西是公共的,则应用相同的访问规则。
由于这些都是变量(它们的值可以更改(,这也意味着任何有权访问它们的代码都可以更改它们的值。因此;怪异的";您正在经历的行为可能是由于在调用nameRating()
函数之前将firstName
和secondName
设置为"0"
的代码的其他部分,这就是为什么firstName
和secondName
相等,并且if
条件计算为true
。
在Android Studio中,您可以右键单击其中一个变量并选择";查找用法";。搜索结果会显示出来,在那里你会看到代码中其他代码可能正在更改变量值的部分。希望这能为你所看到的这种行为提供一些线索。