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 条件,我觉得这很奇怪。调试后发现firstName
和secondName
都是"0"
。我认为这些变量应该是全局的,但令人困惑的是为什么它不起作用,因为 age
变量是正确的。
如果我对这应该如何运作完全错误,任何 explanation/clarification 将不胜感激。
别担心,在这种情况下,Kotlin 并没有在您背后做任何奇怪或神奇的事情。
Kotlin 中的 var
关键字表示您正在声明一个变量,但该变量的范围不是“全局”。范围是声明变量的代码块。在你的例子中,你在 class 范围内声明了 3 个变量,所以这些是 class 变量,可以从 class MainActivity
内的任何地方访问它们。由于它们也是 public
(在 Kotlin 声明中默认为 public,除非您指定不同的访问修饰符,例如 private
、protected
等),这 3 个变量也可以从 class 外部访问(或从子 class),只要调用代码具有对此 class 的实例的引用。这在 Java 中同样有效,如果某些内容是 public,则应用相同的访问规则。
由于这些是变量(它们的值可以改变),这也意味着任何可以访问它们的代码也可以改变它们的值。因此,您遇到的“奇怪”行为可能是由于在调用 nameRating()
函数之前将 firstName
和 secondName
设置为 "0"
的其他部分代码,并且这就是为什么 firstName
和 secondName
相等并且 if
条件计算为 true
.
在 Android Studio 中,您可以右键单击您的变量之一,然后 select“查找用法”。搜索结果将显示出来,您将在代码中看到其他代码可能正在更改变量值的部分。希望这会阐明您所看到的这种行为。
我是一个完全的初学者,已经开始通过 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 条件,我觉得这很奇怪。调试后发现firstName
和secondName
都是"0"
。我认为这些变量应该是全局的,但令人困惑的是为什么它不起作用,因为 age
变量是正确的。
如果我对这应该如何运作完全错误,任何 explanation/clarification 将不胜感激。
别担心,在这种情况下,Kotlin 并没有在您背后做任何奇怪或神奇的事情。
Kotlin 中的 var
关键字表示您正在声明一个变量,但该变量的范围不是“全局”。范围是声明变量的代码块。在你的例子中,你在 class 范围内声明了 3 个变量,所以这些是 class 变量,可以从 class MainActivity
内的任何地方访问它们。由于它们也是 public
(在 Kotlin 声明中默认为 public,除非您指定不同的访问修饰符,例如 private
、protected
等),这 3 个变量也可以从 class 外部访问(或从子 class),只要调用代码具有对此 class 的实例的引用。这在 Java 中同样有效,如果某些内容是 public,则应用相同的访问规则。
由于这些是变量(它们的值可以改变),这也意味着任何可以访问它们的代码也可以改变它们的值。因此,您遇到的“奇怪”行为可能是由于在调用 nameRating()
函数之前将 firstName
和 secondName
设置为 "0"
的其他部分代码,并且这就是为什么 firstName
和 secondName
相等并且 if
条件计算为 true
.
在 Android Studio 中,您可以右键单击您的变量之一,然后 select“查找用法”。搜索结果将显示出来,您将在代码中看到其他代码可能正在更改变量值的部分。希望这会阐明您所看到的这种行为。