局部变量的解释就不多说了,直接说其中两个点:
1.局部变量储存在栈中而成员变量在堆内存中
2.局部变量:随着方法进栈而诞生,随着方法出栈而消失,局部变量:随着方法进栈而诞生,随着方法出栈而消失
val single = SingleLiveEvent() var y = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val bt = findViewById(R.id.bt) bt.setonClickListener { onclicks() } val bt1 = findViewById(R.id.bt1) bt1.setonClickListener { onclick1() } initview() } private fun initview() { var i = 0 if (y == 0) { i = 0 } if (y == 1) { i = 1 } Log.e("mlt","............${i}.....") single.observe(this,{ Log.e("mlt",".....222222.......${i}.....") }) } fun onclicks () { y = 1 initview() } fun onclick1 () { single.value = "1" }
livedata是经过封装的,值在setValue的时候才会执行,那么点击onclicks之后再点击onclick1会打印什么?
2021-10-13 16:24:18.107 11482-11482/com.text.text E/mlt: ............0..... 2021-10-13 16:24:19.607 11482-11482/com.text.text E/mlt: ............1..... 2021-10-13 16:24:21.464 11482-11482/com.text.text E/mlt: .....222222.......0..... 2021-10-13 16:24:23.604 11482-11482/com.text.text E/mlt: ............1..... 2021-10-13 16:24:24.047 11482-11482/com.text.text E/mlt: .....222222.......0..... 2021-10-13 16:24:25.398 11482-11482/com.text.text E/mlt: ............1..... 2021-10-13 16:24:26.058 11482-11482/com.text.text E/mlt: .....222222.......0.....
最后一直都是0,为啥不是1呢,明明已经改变变量的值了,再livedata的时候没有改变呢?
其实根据上面的解释应该能明白 局部变量:随着方法进栈而诞生,随着方法出栈而消失
在第一次点击的时候值是改变的,但在第二次点击的时候,相当于已经重新调用方法,之前的变量已经出栈消失了,再次调用还是初始值!



