Kotlin 全局变量显示为零“0”

Kotlin Global Variable Showing As Zero "0"

我是一个完全的初学者,已经开始通过 YouTube 教程和 Google 搜索细节来学习 Kotlin。 当我在学习教程时,他在 MainActivity class 中创建了三个变量,如下所示

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

我按照示例在 Android Studio 中重新创建了它,但是触发了 if 条件,我觉得这很奇怪。调试后发现firstNamesecondName都是"0"。我认为这些变量应该是全局的,但令人困惑的是为什么它不起作用,因为 age 变量是正确的。

如果我对这应该如何运作完全错误,任何 explanation/clarification 将不胜感激。

别担心,在这种情况下,Kotlin 并没有在您背后做任何奇怪或神奇的事情。

Kotlin 中的 var 关键字表示您正在声明一个变量,但该变量的范围不是“全局”。范围是声明变量的代码块。在你的例子中,你在 class 范围内声明了 3 个变量,所以这些是 class 变量,可以从 class MainActivity 内的任何地方访问它们。由于它们也是 public(在 Kotlin 声明中默认为 public,除非您指定不同的访问修饰符,例如 privateprotected 等),这 3 个变量也可以从 class 外部访问(或从子 class),只要调用代码具有对此 class 的实例的引用。这在 Java 中同样有效,如果某些内容是 public,则应用相同的访问规则。

由于这些是变量(它们的值可以改变),这也意味着任何可以访问它们的代码也可以改变它们的值。因此,您遇到的“奇怪”行为可能是由于在调用 nameRating() 函数之前将 firstNamesecondName 设置为 "0" 的其他部分代码,并且这就是为什么 firstNamesecondName 相等并且 if 条件计算为 true.

在 Android Studio 中,您可以右键单击您的变量之一,然后 select“查找用法”。搜索结果将显示出来,您将在代码中看到其他代码可能正在更改变量值的部分。希望这会阐明您所看到的这种行为。