【问题标题】:Kotlin Global Variable Showing As Zero "0"Kotlin 全局变量显示为零“0”
【发布时间】:2022-01-12 19:36:54
【问题描述】:

我是一个完整的初学者,并且已经开始通过 YouTube 教程和 Google 搜索细节来学习 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()
   }}

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

如果我对这应该如何工作完全错误,我们将不胜感激任何解释/澄清。

【问题讨论】:

  • 这取决于,我们看到你的整个代码了吗?如果我将您在上面发布的内容复制到一个活动中,并且如果我从 onCreate 内部仅调用 nameRating 函数,我将获得所有 3 个变量的预期值。将所有 3 个字段的“var”关键字更改为“val”,看看 Kotlin 编译器是否报错。如果它抱怨,这意味着您在代码中的其他地方将这些字段更改为不同的值(年龄除外,因为那个值是相同的)。在调用 nameRating() 函数之前,可能会发生这种情况,其他代码运行并将前两个变量设置为“0”。

标签: android string kotlin global-variables var


【解决方案1】:

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

Kotlin 中的 var 关键字表示您正在声明一个变量,但该变量的范围不是“全局”的。范围是声明变量的代码块。在您的情况下,您在类范围内声明了 3 个变量,因此这些是类变量,可以从类 MainActivity 内的任何位置访问它们。由于它们也是public(默认情况下在 Kotlin 声明中是公共的,除非您指定不同的访问修饰符,例如 privateprotected 等),因此这 3 个变量也可以从类外部访问(或来自子类),只要调用代码具有对此类实例的引用。这在 Java 中的工作方式相同,如果某些内容是公共的,则适用相同的访问规则。

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

在 Android Studio 中,您可以右键单击其中一个变量并选择“查找用法”。搜索结果将显示,您将在代码中看到其他代码可能会更改变量值的部分。希望这会对您所看到的这种行为有所启发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2017-04-18
    相关资源
    最近更新 更多