android: ?和!!的区别

一,?和!!的区别

?.!!主要区别在于它们对空指针的处理方式

?.(安全调用操作符)‌:当变量可能为null时,使用?.可以安全地调用其方法或属性。
        如果变量为null,则不执行调用,直接返回null

!!(非空断言操作符)‌:当变量可能为null时,使用!!会强制执行调用,
        如果变量为null,则会抛出空指针异常

两者的区别

问号?的使用:

在声明对象时,把它跟在类名后面,表示这个类允许为null;
在调用对象时,把它跟在对象后面,表示如果为null程序就会视而不见。

两个叹号!!的使用

加在变量名后,如果对象为null,那么系统一定会报异常

二,代码例子:

        val button1: Button = findViewById(R.id.button1)
        button1.setOnClickListener {
            // 在这里处理点击事件
            val list: ArrayList<String>? = null
            Log.d("TAG", "----List Size is ${list?.size}")
        }

        val button2: Button = findViewById(R.id.button2)
        button2.setOnClickListener {
            // 在这里处理点击事件
            val list: ArrayList<String>? = null
            Log.d("TAG", "----List Size is ${list!!.size}")
        }

        val button3: Button = findViewById(R.id.button3)
        button2.setOnClickListener {
            // 在这里处理点击事件
            val list: ArrayList<String>? = null
            Log.d("TAG", "----List Size is ${list.size}")
        }

button1点击后:输出: ----List Size is null

button2点击后:抛出异常

button3这个写法是不能运行的,提示需要处理可为空的接收者(nullable receiver),
           因为list值为null,所以要给list变量加上!!或?

posted @ 2025-06-14 15:21  刘宏缔的架构森林  阅读(53)  评论(0)    收藏  举报