Kotlin基礎類型


numbers類型:

數字類型的數據有Byte,Short,Float,Int,Long,Double,這些類型在java中也都是基礎數據類型。

與java不同之處在於:

  • Char類型已經不再是數字類型了。
  • 在java之中基礎數據類型都對應有一個包裝類,如int,對應Integer,而在kotlin中基礎數據類型已經是類類型的了。
  • 不同類型的數字之間不能自動轉換,需要明確調用相應的方法。有一系列的轉換方法,toShort,toByte,toInt……想轉成什么類型,就調用對應的toXX()方法即可
  • 支持二進制(0b1111),十進制(123456),十六進制(0xFFFF00),但是不支持八進制。
  • 數字之間允許用下划線分割,更方便閱讀
  • 位運算符不在是>>,<<,>>>,<<<,&,!,~,|,Kotlin中用的是一個叫做中綴表達式的玩意兒
    var a: Int = 100
    var b: Short = 10
    a = b//error require Int,found Short
    a = b.toInt()

  //數字之間可以添加下划線,方便閱讀
  var c: Int = 1000_1000_1000
  var d: Int = 0b11111_1111
  var e: Int = 0xFF_FF_FF_FF

  var f: Char = 1//error Char類型必須以''包起來
  var g: Char = 'a'

  //位運算
  tempValue1 shl 2 //<<2
  tempValue1 shr 2//>>2
  tempValue1 ushr 2//>>>2 我相信沒有有人會好奇咋沒有<<<2吧?如果你好奇了,我也不會告訴你為啥
  tempValue1 and tempValue2// tempValue1 & tempValue2
  tempValue1 or tempValue2// tempValue1 |tempValue2
  tempValue1 xor tempValue2// tempValue1 ^ tempValue2
  tempValue1.inv()// ~tempValue1

與java相同之處在於:

  • 依舊沒有原生提供unsigned無符號數據類型。
  • 數據類型長度是一樣的,Char(8),Short(16),Int(32),Float(32),Long(64),Double(64)
  • 雖然Kotlin中數字類型是類類型,但是申明數字類型變量依舊和java類似:val a: Int = 1,var b:Short = 1,Float類型變量后面要加f/F,Long類型后面只能加L,小l會編譯不通過

那么在Kotlin中是怎么把有符號轉成無符號的數據類型的呢,方法如下(Java中也是一樣的):

fun getUnsignedByte(value: Byte): Int {
    return value.toInt() and 0xFF
}

fun getUnsignedShort(value: Short):Int{
    return value.toInt() and 0xFFFF
}

fun getUnsignedInt(value: Int): Long{
    return value.toLong() and 0xFFFFFFFF
}

上面分別是將有符號Byte,Short,Int轉成對應的無符號數據,so,不要再噴Kotlin和Java的數據類型不完整啦,沒有無符號類型啦,巧妙運用位運算,有符號轉無符號,so easy!

(寫到這個so easy,就想起最近隔壁組的項目經理老提起步步高點讀機那個廣告中的小姑娘高考考的分數很低的梗)

 

Char類型

為什么要單獨說一下這個Char類型,上面已經提到過,在Kotlin中Char已經不再是數字類型

fun check(c: Char) {
    if( c == 1){
        //error: Operator '==' cannot be applied to 'Char' and 'Int'
    }
}

//正確申明char變量的姿勢:
var char1: Char = 'a'
//咋把Char轉成Int呀?上面說咯,toInt即可
var a: Int = 'a'.toInt()

 

Bool類型

就2個只true,false

&&,||,!運算規則和Java相同

 

Array類型

數組的申明在Kotlin中是迥異於Java的,數組現在變成了一個泛型類。這意味着只能放同類型對象了。對數組調用下表運算符[]其實是利用了運算符重載的特性

    var tempArray2: Array<Int> = Array(5, { i -> i * i })//利用數組的構造函數
    var tempArray: Array<Int> = arrayOf(1, 2, 3)//利用庫函數申明一個函數
    var tempArray1: Array<Int?> = kotlin.arrayOfNulls<Int>(100)//申明100個元素的空數組
//  var tempArray5: Array<Long> = tempArray//error 不能相互轉換
    var array: Array<Any> = arrayOf(1.0f, 0xFF, 3, "我是中國人")//申明一個可以裝任意數據類型的數組

 

Kotlin庫還提供了一些對於特定類型數據的Array類,如ByteArray,ShortArray,IntArray等等。

 

String類型

var str1: String = "Hello,Kotlin"//單行字符串
var multiStr:String = """
    啦啦啦啦
啦啦啦
嘿嘿嘿
"""//多行字符串

string類型最大的不同就在於模板字符串咯

 var id: Int = 1
 var name: String = "liuliqianxiao"
 var result: String = "the id is $id and the name is $name"//還記得在java中怎么拼字符串嗎
 var result1: String = "the name`s length is ${name.length}"//可以在${}的大括號中寫入表達式

是不是感覺模板字符串很好用呢?

 

好吧,這篇Kotlin中基礎類型就簡單寫到這里咯,這里對比了一些Java,有可能寫的不對,也有可能新時代的java已經不是我描述的醬紫了。錯誤之處依舊請不留情面的指出來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM