局部变量的解释就不多说了,直接说其中两个点:
1.局部变量储存在栈中而成员变量在堆内存中
2.局部变量:随着方法进栈而诞生,随着方法出栈而消失,局部变量:随着方法进栈而诞生,随着方法出栈而消失
val single = SingleLiveEvent<String>()var y = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val bt = findViewById<AppCompatButton>(R.id.bt)bt.setOnClickListener { onclicks() }val bt1 = findViewById<AppCompatButton>(R.id.bt1)bt1.setOnClickListener { onclick1() }initview()}private fun initview() {var i = 0if (y == 0) {i = 0}if (y == 1) {i = 1}Log.e("mlt","............${i}.....")single.observe(this,{Log.e("mlt",".....222222.......${i}.....")})}fun onclicks () {y = 1initview()}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的时候没有改变呢?
其实根据上面的解释应该能明白 局部变量:随着方法进栈而诞生,随着方法出栈而消失
在第一次点击的时候值是改变的,但在第二次点击的时候,相当于已经重新调用方法,之前的变量已经出栈消失了,再次调用还是初始值!