栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 局部变量问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 局部变量问题

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

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325498.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号