Kotlin 基本數據類型

Kotlin基本數值類型

Kotlin 的基本數值類型有六種掖鱼,即Byte,Short,Int,Long,Float,Double.我們發(fā)現(xiàn)與Java不同止剖,它沒有char類型(kotlin中字符不是數值類型)媳溺。

????類型???? ??????位寬度(Bit)???
Byte 8
Short 16
Int 32
Long 64
Float 32
Double 64

字面常量

  • 十進制,與普通寫法一般夜郁,如 1234
  • Long型,在數字后面加L.==L必須大寫==脖咐。如 1234L
  • 十六進制,以0x開頭汇歹。 如0xffffff
  • 二進制表示則以0b打頭屁擅,如 0b00001011
  • 浮點數值若以f或F結束,則為Float類型产弹,否則為Double
  • 不支持八進制的字面常量派歌。
  • 定義數字常量時,可以使用 ==_==(下劃線)分隔數字痰哨,讓其更易讀

定義常量變量

  • Kotlin中定義常量與不可變變量(類似于Java final關鍵字修飾的變量)使用val關鍵字

      val <標識符> : <類型> = <初始化值>
    
  • 變量定義則使用關鍵字 var

      var <標識符> : <類型> = <初始化值>
    

編繹器支持自動類型判斷胶果,即聲明時可以不指定類型,由編繹器去判定斤斧。

非抽象類中早抠,全局常量或變量在聲明變量時必須初始化。否則會有如下提示

image

或者改成這樣就不會有問題

abstract class Test {

    abstract val q :Int;
}

而方法內的局部變量或常量撬讽,在聲明時則可以不初始化蕊连,但是在引用前必須初始化,如下:

fun testMethod():Int{
        var a :Int;
        a = 2;
        a++;
        return a+2;
    }

下面有一些聲明常量或變量的例子

    abstract val q :Int;

    val a :Int = 1;

    val b = 1;

    val  temp = 4L;

    var bu = 2.55;

    val PRICE = 1234_5214_1522;

    var t = 0xffffff;

    var f = 4.5f;

    var c:String = "my name is oeager"

布爾類型

布爾用Boolean類型表示游昼,它有兩個值:true 和 false甘苍。
Boolean內置的函數邏輯運算有:

 fun booleanTypeTest(flag:Boolean,a:Boolean){

        val and = flag.and(a);//&&

        val or = flag.or(a);// ||

        var not = flag.not();// !

        var xor = flag.or(a)// ^
    }

字符類型

和 Java 不一樣,Kotlin 中的 Char 不能直接和數字操作烘豌,Char 必需是單引號''包含起來的载庭。比如普通字符 '0','a'廊佩。

如下的錯誤示例

var Char ch = 1;//error
  • 字符字面值需用單引號括起來,如 ‘1’标锄。

  • 特殊字符需用反斜杠轉義顽铸。支持這幾個轉義序列:\t、 \b跋破、\n毒返、\r拧簸、'盆赤、"牺六、\ 和 $颤枪。 編碼其他字符要用 Unicode 轉義序列語法:'\uFF00'。

  • 可以使用toInt()將數字字符轉化為數字

    fun testMethod3(){
          val ch :Char = '8';
          val a :Int = ch.toInt()
          print(a)
      }
    

數組

數組用類 Array 實現(xiàn)淑际,并且還有一個 size 屬性及 getset 方法畏纲,由于使用 [] 重載了 getset 方法,所以我們可以通過下標很方便的獲取或者設置數組對應位置的值春缕。
數組的創(chuàng)建兩種方式:

  • 使用函數arrayOf()盗胀;
  • 使用工廠函數。

如下所示

  fun arrayTest(args:Array<String>){

        val array1 = arrayOf("str","str2")

        val array2 = Array(5,{index->(index+1)});
        
        print(array1[0])//輸出 str
        
        print(array2[1])//輸出2
    }

工廠方法源碼如下

  /**
     * Creates a new array with the specified [size], where each element is calculated by calling the specified
     * [init] function. The [init] function returns an array element given its index.
     */
    public inline constructor(size: Int, init: (Int) -> T)

第一個參數锄贼,表示數組長度票灰,后面的花括號中是一個初始化值的執(zhí)行代碼塊,給出數組下標宅荤,初始化該下標的值屑迂。

除了類Array還有ByteArray, ShortArray, IntArray膘侮,用來表示各個類型的數組屈糊,省去了裝箱操作,因此效率更高琼了,其用法同Array一樣:

val x: IntArray = intArrayOf(1, 2, 3)

: 與 Java 不同的是,Kotlin 中數組是不型變的(invariant)夫晌。這意味著 Kotlin 不讓我們把 Array 賦值給 Array雕薪,以防止可能的運行時失敗

字符串類型

字符串也可以理解成字符的數組,可以用[]通過下標來獲取對應的字符

Kotlin 支持三個引號 """ 擴起來的字符串晓淀,支持多行字符串所袁,比如:

fun strSample() {
    val text = """
    str1
    str2
    """
    println(text)   // 輸出有一些前置空格
}

String 可以通過 trimMargin() 方法來刪除多余的空白。

fun strSample() {
    val text = """
    | str1
    |str2
    |多行字符串
    |bbbbbb
    """.trimMargin()
    println(text)    // 前置空格刪除了
}

字符串模板

  • $ 表示一個變量名或者變量值

  • $varName 表示變量值

  • ${varName.fun()} 表示變量的方法返回值:

      fun transform(text:String):String ="${text.replace("is","not is")},but origin is $text"
    

原生字符串和轉義字符串內部都支持模板凶掰。 如果你需要在原生字符串中表示字面值 $ 字符(它不支持反斜杠轉義)燥爷,你可以用下列語法:

fun strMouduar() {
    val price = """
    ${'$'}9.99
    """
    println(price)  // 求值結果為 $9.99
}

類型對象比較

Java中比較兩個對象地址是否相同時,用==符號懦窘,若要比較值相等前翎,則調用Object的equals方法,但是在Kotlin中畅涂,==即表示比較值(equals),===則相當于比較對象地址

fun compare(args: Array<String>) {
    val a: Int = 10000
    println(a === a) // true港华,值相等,對象地址相等

    //經過了裝箱午衰,創(chuàng)建了兩個不同的對象
    val b: Int? = a
    val c: Int? = a

    //雖然經過了裝箱立宜,但是值是相等的冒萄,都是10000
    println(b === c) //  false,值相等橙数,對象地址不一樣
    println(b == c) // true尊流,值相等
}

數據類型轉換

由于不同的表示方式,較小類型并不是較大類型的子類型灯帮,較小的類型不能隱式轉換為較大的類型崖技。 這意味著在不進行顯式轉換的情況下我們不能把 Byte 型值賦給一個 Int 變量。

val b: Byte = 1 // OK, 字面值是靜態(tài)檢測的
val i: Int = b // 錯誤

可以像下面這樣

val b: Byte = 1 // OK, 字面值是靜態(tài)檢測的
val i: Int = b.toInt() // OK

每種數據類型都有下面的這些方法施流,可以轉化為其它的類型:

toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char

根據上下文環(huán)境能推斷出正確的數據類型响疚,這種情況下類型能自動轉化。

val l = 1L + 3 // Long + Int => Long

位操作符

對于Int和Long類型瞪醋,還有一系列的位操作符可以使用忿晕,分別是:

shl(bits) – 左移位 (Java’s <<)
shr(bits) – 右移位 (Java’s >>)
ushr(bits) – 無符號右移位 (Java’s >>>)
and(bits) – 與
or(bits) – 或
xor(bits) – 異或
inv() – 反向
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市银受,隨后出現(xiàn)的幾起案子践盼,更是在濱河造成了極大的恐慌,老刑警劉巖宾巍,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咕幻,死亡現(xiàn)場離奇詭異,居然都是意外死亡顶霞,警方通過查閱死者的電腦和手機肄程,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來选浑,“玉大人蓝厌,你說我怎么就攤上這事」磐剑” “怎么了拓提?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隧膘。 經常有香客問我代态,道長,這世上最難降的妖魔是什么疹吃? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任蹦疑,我火速辦了婚禮,結果婚禮上互墓,老公的妹妹穿的比我還像新娘必尼。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布判莉。 她就那樣靜靜地躺著豆挽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪券盅。 梳的紋絲不亂的頭發(fā)上帮哈,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音锰镀,去河邊找鬼娘侍。 笑死,一個胖子當著我的面吹牛泳炉,可吹牛的內容都是我干的憾筏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼花鹅,長吁一口氣:“原來是場噩夢啊……” “哼氧腰!你這毒婦竟也來了?” 一聲冷哼從身側響起刨肃,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤古拴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后真友,有當地人在樹林里發(fā)現(xiàn)了一具尸體黄痪,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年盔然,在試婚紗的時候發(fā)現(xiàn)自己被綠了桅打。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡愈案,死狀恐怖油额,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情刻帚,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布涩嚣,位于F島的核電站崇众,受9級特大地震影響,放射性物質發(fā)生泄漏航厚。R本人自食惡果不足惜顷歌,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幔睬。 院中可真熱鬧眯漩,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至队萤,卻和暖如春轮锥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背要尔。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工舍杜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赵辕。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓既绩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親还惠。 傳聞我的和親對象是個殘疾皇子饲握,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容