我是一個完整的初學者,已經開始通過 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()
}}
我照著這個例子在Android Studio中重新創建了它,但是if條件觸發了,我覺得很奇怪。除錯后,它變成了兩個firstName和secondName的"0"。我認為變數應該是全域的,并且令人困惑的是為什么它不起作用,因為age變數是正確的。
如果我對這應該如何作業完全錯誤,將不勝感激對此問題的任何解釋/澄清。
uj5u.com熱心網友回復:
別擔心,在這種情況下,Kotlin 不會在你背后做任何奇怪或神奇的事情。
varKotlin 中的關鍵字意味著您正在宣告一個變數,但該變數的范圍不是“全域”的。范圍是宣告變數的代碼塊。在您的情況下,您在類范圍內宣告了 3 個變數,因此這些是類變數,可以從類內的任何位置訪問它們MainActivity。因為他們也是public(默認情況下在科特林宣告是公開的,除非您指定一個不同的訪問修飾符,如private,protected等),這3個變數也可以從類外部訪問(或子類),只要呼叫代碼具有對此類的實體的參考。這在 Java 中的作業原理相同,如果某些內容是公共的,則應用相同的訪問規則。
由于這些是變數(它們的值可以改變),這也意味著任何可以訪問它們的代碼也可以改變它們的值。因此,“怪異”的行為,你遇到的是可能是由于代碼設定的其他部分firstName,并secondName以"0"之前的nameRating()函式被呼叫,這就是為什么firstName和secondName相等,且if條件計算結果為true。
在 Android Studio 中,您可以右鍵單擊其中一個變數并選擇“Find Usages”。將顯示搜索結果,您將在代碼中看到其他代碼可能正在更改變數值的部分。希望這能對您所看到的這種行為有所了解。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375837.html
