Kotlin 可變參數(vararg)中的*

最近看源碼遇到一句話java

public inline fun String.format(vararg args: Any?): String = java.lang.String.format(this, *args)

其中的*args讓人一臉懵逼, 一上來還覺得是指針數組

後來和羣裏討論,大神寫了個例子,一上來看的時候不太明白,後來本身寫了一下發現其實就是把數組拆分爲 可變參數this

fun main(args: Array<String>) {
    var arr = arrayOf("gao%s", "gao")
    testVargs(*arr)
}

fun testVargs(vararg ttt: String) = ttt.forEach(::println)

進一步驗證, 注意formatNotParse中的參數也是數組,往下傳遞須要 加 * 不然會傳遞內存地址。指針

fun main(args: Array<String>) {
    var test = "gao%s"
    println(test.formatNotParse("lili"))//gao[Ljava.lang.Object;@2c7b84de
    println(test.formatParse("lili"))//gaolili
}

inline fun String.formatNotParse(vararg args: Any?): String = java.lang.String.format(this, args)
inline fun String.formatParse(vararg args: Any?): String = java.lang.String.format(this, *args)
相關文章
相關標籤/搜索