当前位置: 代码迷 >> 综合 >> java 局部变量问题
  详细解决方案

java 局部变量问题

热度:59   发布时间:2023-10-19 06:13:16.0

局部变量的解释就不多说了,直接说其中两个点:

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的时候没有改变呢?

其实根据上面的解释应该能明白 局部变量:随着方法进栈而诞生,随着方法出栈而消失

在第一次点击的时候值是改变的,但在第二次点击的时候,相当于已经重新调用方法,之前的变量已经出栈消失了,再次调用还是初始值!