溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Kotlin學(xué)習(xí)筆記之const val與val

發(fā)布時(shí)間:2020-09-19 18:57:57 來源:腳本之家 閱讀:310 作者:wenson123 欄目:移動(dòng)開發(fā)

const的使用

const 必須修飾val

const 只允許在top-level級(jí)別和object中聲明,使用方式如下:

const val THOUSAND = 1000
object myObject {
 const val constNameObject: String = "constNameObject"
}


class MyClass {
 companion object Factory {
 const val constNameCompanionObject: String = "constNameCompanionObject"
 }
}

const val和val區(qū)別:

說到這,我們還是沒有搞清楚const和val的區(qū)別,ok讓我們看代碼分析。

object myObject {
 const val constObject: String = "constObject"
 val normalObject: String = "normalObject"
}

打開Android studio 點(diǎn)擊 Tools->Kotlin->Show Kotlin ByteCode

// class version 50.0 (50)
// access flags 0x31
public final class com/example/kotlin/myObject {
 // access flags 0x19
 public final static Ljava/lang/String; constObject = "constObject"
 @Lorg/jetbrains/annotations/NotNull;() // invisible

 // access flags 0x1A
 private final static Ljava/lang/String; normalObject = "normalObject"
 @Lorg/jetbrains/annotations/NotNull;() // invisible

 // access flags 0x11
 public final getNormalObject()Ljava/lang/String;
 @Lorg/jetbrains/annotations/NotNull;() // invisible
 L0
 LINENUMBER 144 L0
 GETSTATIC com/example/kotlin/myObject.normalObject : Ljava/lang/String;
 ARETURN
 L1
 LOCALVARIABLE this Lcom/example/kotlin/myObject; L0 L1 0
 MAXSTACK = 1
 MAXLOCALS = 1
 ......
}

從字節(jié)碼我們可以看到const val 和val修飾對(duì)象的主要區(qū)別是:

  • const val 可見性為public final static,可以直接訪問。
  • val 可見性為private final static,并且val 會(huì)生成方法getNormalObject() ,通過方法調(diào)用訪問。

附:Kotlin中var和val的區(qū)別

Kotlin中有兩個(gè)關(guān)鍵字定義變量,這兩個(gè)關(guān)鍵字外形看著差別很小就只差了一個(gè)字母,但實(shí)際差別很大的。

var是一個(gè)可變變量,這是一個(gè)可以通過重新分配來更改為另一個(gè)值的變量。這種聲明變量的方式和java中聲明變量的方式一樣。

val是一個(gè)只讀變量,這種聲明變量的方式相當(dāng)于java中的final變量。一個(gè)val創(chuàng)建的時(shí)候必須初始化,因?yàn)橐院蟛荒鼙桓淖儭?/p>

var name = "zhang san" 
println(name) 
name = "li si" 
println(name) 
val finalValue = "我是不可改變的"; 
println(finalValue); 

總結(jié):

當(dāng)定義常量時(shí),出于效率考慮,我們應(yīng)該使用const val方式,避免頻繁函數(shù)調(diào)用。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI