Kotlin_lesson_01_基本型別
基本型別
數字型別
Type | Bit width |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
與java
不同的是characters
不再是基本數字型別。
數值的表示
十進位制:123 (Long:123L)
16進位制:0x0F
二進位制:0b00001011
不支援八進位制
kotlin也支援浮點數值
Double:123.5,123.5e10
Float(f or F為數值字尾):123.5f
下劃線在數值中的使用
可以用下劃線去分割數值,增加數值可讀性
val oneMillion = 1_000_000 val creditCardNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010
表現形式
在java平臺,數字型別是以JVNM基本位元組的形式存在實體記憶體中,除非需要空的數字引用(e.g. Int?
)或者是泛型引用。後者數字型別會進行封箱。
需要注意的是封箱不會保證引用同一實體地址。
val a: Int = 10000print(a === a) // Prints 'true'val boxedA: Int? = a val anotherBoxedA: Int? = aprint(boxedA === anotherBoxedA) // !!!Prints 'false'!!!
另一方面只會保證其對應的數值相等
val a: Int = 10000print(a == a) // Prints 'true'val boxedA: Int? = a val anotherBoxedA: Int? = aprint(boxedA == anotherBoxedA) // Prints 'true'
精確的型別轉換
由於不同的表現形式,較小的資料型別時不能代表較大的資料型別,會發生意想不到的事情:
// Hypothetical code, does not actually compile:val a: Int? = 1 // A boxed Int (java.lang.Integer)val b: Long? = a // implicit conversion yields a boxed Long (java.lang.Long)print(a == b) // Surprise! This prints "false" as Long's equals() check for other part to be Long as well
不僅僅是型別不同,就連數值也是不同的
val b: Byte = 1 // OK, literals are checked statically val i: Int = b // ERROR
我們可以精確的做型別轉換:
val i:Int=b.toInt()
所有的數值型別都支援以下的型別轉換:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
就“長”原則,例如:
val l = 1L + 3 // Long + Int => Long
Booleans(布林)
Boolean有兩個值:true,false
Boolean也是引用型別,可以為null
Boolean運算子有:
||
-或(左邊若為true,就不會去管右邊)&&
-且(左邊false,就不會去管右邊)!
-非
Arrays
陣列在kotlin中用Array
來表示,它有get
和set
方法,size
屬性,還有其它一些比較實用的成員方法:
class Arrayprivate constructor() { val size: Int operator fun get(index: Int): T operator fun set(index: Int, value: T): Unit operator fun iterator(): Iterator // ...}
建立Array
的方法:
val array= arrayOf(1,2,3)//-->array[1,2,3]//建立指定型別和長度的空陣列val array= arrayOfNulls(3) // Creates an Array with values ["0", "1", "4", "9", "16"]val asc = Array(5, { i -> (i * i).toString() })
Strings
字串有String
來表示。String
是不可變的,String中的元素可以用s[i]
表示,也可一使用for迴圈:
for (c in str) { println(c) }
kotlin中,有兩種字元值型別的字串,一種是包含跳脫字元的字串,另一種是原始字串就想java中的String
val s = "Hello, world!n"
多行字串可以用"""
來包裹,裡面不能包含跳脫字元
val text = """ for (c in "foo") print(c) """
當然你可以刪除縮緊,用trimMargin()
方法來設定字首:
val text = """ |Tell me and I forget. |Teach me and I remember. |Involve me and I learn. |(Benjamin Franklin) """.trimMargin()
|
是預設的字首,你可以自定義字首如trimMargin(">")
字串模版
//$為識別符號,後面直接跟要填充的變數名 val i = 10val s = "i = $i" // evaluates to "i = 10"//可以用任意的表示式做模版 val s = "abc"val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3"//$是關鍵字,需要轉義為${'$'} val pri ce = """ ${'$'}9.99 """
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1868/viewspace-2814289/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- Typescript:基本型別TypeScript型別
- Go 基本型別Go型別
- js基本型別和引用型別區別JS型別
- JAVA 基本型別與 引用型別區別Java型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- Java的基本型別和引用型別Java型別
- 基本資料型別與字串型別資料型別字串
- JavaFX教程——基本型別Java型別
- 基本資料型別資料型別
- JS篇-基本型別和引用型別、typeofJS型別
- JS基本型別與引用型別知多少JS型別
- 你不知道的JavaScript--Item4 基本型別和基本包裝型別(引用型別)JavaScript型別
- Java基礎-基本型別和包裝型別Java型別
- JavaScript基本資料型別JavaScript資料型別
- Java 基本資料型別Java資料型別
- 原子更新基本型別類型別
- JavaScript基本型別總結JavaScript型別
- Redis基本資料型別Redis資料型別
- Java -基本資料型別Java資料型別
- 探索Scala(5)-- 基本型別型別
- 003基本資料型別資料型別
- Java基本資料型別Java資料型別
- MySQL基本資料型別MySql資料型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- TypeScript 基本型別和泛型的使用TypeScript型別泛型
- Python基本資料型別:布林型別(Boolean)Python資料型別Boolean
- 基本資料型別與API引用型別的使用資料型別API
- C++基本資料型別及型別轉換C++資料型別
- 從賦值看基本型別和引用型別的區別賦值型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 基本資料型別,for迴圈資料型別
- Go語言之旅:基本型別Go型別
- Redis資料型別基本操作Redis資料型別
- python–基本型別之列表Python型別
- python基本資料型別Python資料型別
- 基本資料型別轉化資料型別