作者:mobiledu2502900505 | 来源:互联网 | 2023-02-01 12:33
我是Kotlin的新手.我想知道这两者之间的区别!!
,并?
在下面的代码.
我有两个片段首先使用!!
mCurrentDataset而另一个?
用于同一个变量.
if(!mCurrentDataset!!.load(mDataSetString.get(mCurrentDataSelectionIndex), STORAGE_TYPE.STORAGE_APPRESOURCE))
{
Log.d("MyActivity","Failed to load data.")
return false
}
if(!mCurrentDataset?.load(mDataSetString.get(mCurrentDataSelectionIndex), STORAGE_TYPE.STORAGE_APPRESOURCE)!!)
{
Log.d("MyActivity","Failed to load data.")
return false
}
提前致谢.
1> Alexander Ro..:
正如它在Kotlin参考中所说,!!
是NPE爱好者的选择:)
a!!.length
将返回非null值a.length
或抛出NullPointerException,如果a
是null
:
val a: String? = null
print(a!!.length) // >>> NPE: trying to get length of null
a?.length
a.length
如果a
不是则返回null
,null
否则:
val a: String? = null
print(a?.length) // >>> null is printed in the console
总结一下:
+------------+--------------------+---------------------+----------------------+
| a: String? | a.length | a?.length | a!!.length |
+------------+--------------------+---------------------+----------------------+
| "cat" | Compile time error | 3 | 3 |
| null | Compile time error | null | NullPointerException |
+------------+--------------------+---------------------+----------------------+
可能有用:什么是NullPointerException?
2> holi-java..:
符的优先级!
,?.
,!!
是?.
> !!
> !
.
该!!
运营商将提高KotlinNullPointerException
时,在操作null
的参考,例如:
null!!;// raise NullPointerException
安全调用?.
操作符将null
在对null
引用进行操作时返回,例如:
(null as? String)?.length; // return null;
如果左侧是,则!!
第二种方法中的操作员可能会抬起,例如:NullPointerException
null
mCurrentDataset?.load(..)!!
^-------------^
|
when mCurrentDataset== null || load() == null a NullPointerException raised.
你可以在你的情况下使用elvis操作符 ?:
而不是!!
操作符,例如:
!(mCurrentDataset?.load(..)?:false)
3> kishu mewara..:
这是 '!!' double-bang运算符始终返回非空值,这是“?” 如果值不为null,则安全调用运算符返回value,否则返回null
这是将不安全的可空类型(T?)转换为不可空类型(T)。如果该值为null,则将抛出NullPointerException。
它与Kotlin的零安全手段一起记录在这里。
ref- 热键
4> Nitesh Ranja..:
In Addition to what Alexander said and as shown in the docs too,
在?.
安全调用操作是在链非常有用的,这样的事情
student?.department?.hod?.name
如果没有学生,则返回null,否则寻找他的系。如果部门不存在,则返回null,否则查找hod(部门负责人),依此类推。
如果学生,部门或学院的任何一位为空,则结果将为空。