Kotlin学习(四): 基本类型(Basic Types)
来源:互联网 发布:dw软件怎么下载 编辑:程序博客网 时间:2024/06/04 08:56
本文是学习Kotlin的基本类型,Kotlin的基本类型与Java有一些不同,例如整数类型,Java是int
表示,而Kotlin是Int
表示;例如布尔类型,Java是boolean
表示,而Kotlin是用Boolean
表示。
在 Kotlin 中,所有变量的成员方法和属性都是一个对象,我们可以在任何变量上调用成员函数和属性。
在本文中,将会讲解经常被使用的类型: Numbers
,Characters
,Booleans
,Arrays
,Strings
。
Numbers(数值)
Kotlin处理数值的方式与Java类似,单又不完全相同,例如,数值没有隐式扩展转换,在默写情况下文字也略有不同。
Kotlin 提供了如下内建数值类型(与Java类似)
注意:字符不是kotlin中的数值类型
字面常量(Literal Constants)
对于整数值,有以下几种常量
- 整型: 123
- 长整型要加 L
: 123L
- 16进制: 0x0F
- 二进制: 0b00001011
对于浮点数值
- Doubles类型: 123.5
, 123.5e10
- Floats类型要加 f
or F
: 123.5f
注意:不支持8进制
数值中的下划线(1.1版开始)
Java8支持数值使用下划线类分割数字分组,可以使用下划线使数字常量更易读:
val oneMillion = 1_000_000val hexBytes = 0xFF_EC_DE_5Eval bytes = 0b11010010_01101001_10010100_10010010
等同于
1000000ffecde5e11010010011010011001010010010010
表示法(Representation)
在Java平台上,数值被 JVM 虚拟机以字节码的方式物理存储的,除非我们需要做可空标识(比如说 Int?) 或者涉及泛型。
val a: Int = 10000print(a === a) // 打印'true' ,与Java的‘===’一样val boxedA: Int? = aval anotherBoxedA: Int? = aprint(boxedA === anotherBoxedA) // 打印`false`
另一方面,值是相等的
val a: Int = 10000print(a == a) // 打印 'true'val boxedA: Int? = aval anotherBoxedA: Int? = aprint(boxedA == anotherBoxedA) // 打印 'true'
显式转换(Explicit Conversions)
由于不同的表示,短类型不是长类型的子类型
//这是些伪代码,不能编译的val a: Int? =1 // Int (java.lang.Integer)val b: Long? = a // Long (java.lang.Long)print( a == b ) // 打印 'false' ,由于 Long 类型的 equals() 只有和 Long 比较才会相同
短类型是不会隐式(自动)转换为长类型的,需要显示(手动)转换才行
val b: Byte = 1 // val i: Int = b // 错误,不能自动转换
改为显示(手动)转换
val i: Int = b.toInt() // 成功
数值类型支持的转换有下面几种
- toByte(): Byte
- toShort(): Short
- toInt(): Int
- toLong(): Long
- toFloat(): Float
- toDouble(): Double
- toChar(): Char
Kotlin会自动转换类型的,比如
val l = 1.toLong + 1 // Long + Int => Long,自动转换成Long类型
运算符(Operations)
Kotlin支持标准的算术运算表达式,这些运算符被声明为相应类的成员。
对于位操作,没有特殊的字符,只是命名的函数可以以中缀形式调用,例如
val x = (1 shl 2) and 0x000FF000
支持的位运算操作符有(仅适用于Int
和Long
类型)
- shl(bits)
– 带符号左移 (相当于 Java的 <<
)
- shr(bits)
– 带符号右移 (相当于 Java的 >>
)
- ushr(bits)
– 无符号右移 (相当于 Java的 >>>
)
- and(bits)
– 按位与
- or(bits)
– 按位或
- xor(bits)
– 按位异或
- inv()
– 按位翻转
Characters(字符)
字符类型用 Char 表示,不能直接当做数值来使用
fun check(c: Char) { if (c == 1) { // 错误:类型不匹配 // ... }}
字符文字用单引号括起来:’1’,可以使用反斜杠转义特殊字符,支持以下转义序列:\ t,\ b,\ n,\ r,\’,\“,\和\ $。
要编码任何其他字符,使用Unicode转义序列语法:’\ uFF00’。
下面是将字符类型显示(手动)转换成Int类型
fun decimalDigitValue(c: Char): Int { if (c !in '0'..'9') throw IllegalArgumentException("Out of range") return c.toInt() - '0'.toInt() // 显示转换为数值类型}
Boleans(布尔值)
Kotlin的Boolean
同Java的boolean
类型一样,只有true
和false
Boolean
的操作同Java一样
- ||
– 或者
- &&
– 并且
- !
- 非
Arrays(数组)
Kotlin中的数组由Array表示,通过[]
调用get
和set
方法,支持size
属性,以及其他,下面是Array
代码
class Array<T> private constructor() { val size: Int fun get(index: Int): T fun set(index: Int, value: T): Unit fun iterator(): Iterator<T> // ...}
可以使用 arrayOf()
创建Array,arrayOf(1, 2, 3)
创建了一个[1, 2, 3]
的数组。
可以使用 arrayOfNulls()
创建一个指定大小的空Array。
另外也可以使用工厂函数,该函数采用数组大小和函数,该函数可以返回每个数组元素的索引的初始值
// 创建 Array<String> 内容为 ["0", "1", "4", "9", "16"]val asc = Array(5, { i -> (i * i).toString() })
注意:和 java 不一样,arrays 在 kotlin 中是不可变的。这意味这 kotlin 不允许我们把 Array转为 Array,这样就阻止了可能的运行时错误(但可以用 Array)
Kotlin 有专门的类来表示原始类型: ByteArray, ShortArray, IntArray 等等。这些类与Array类没有继承关系,但它们具有相同的方法和属性集。也有相应的工厂功能
val x: IntArray = intArrayOf(1, 2, 3) // 创建一个Int类型的Arrayx[0] = x[1] + x[2]
Strings(字符串)
字符串由类型String
表示,字符串是不可变的。字符串的元素是可以通过索引操作访问的字符:s [i]
。一个字符串可以用一个for循环迭代
for (c in str) { println(c)}
字符串字面量(String Literals)
Kotlin 有两种类型的 String
:一种是可以带分割符的,一种是可以包含新行以及任意文本的。
带分割符的 String
与Java 的 String
类似
val s = "Hello World!\n"
如果String 是由三个引号包裹的(“”“),不可以包含分割符但可以包含其它字符:
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(“>”)
。
字符串模版(String Templates)
字符串可以包含模板表达式,前面介绍了可以使用’${}’模版表达式
val s = "abc"val str = "$s.length is ${s.length}" //识别为 "abc.length is 3"
还有一种是可以使用$
模版表达式
val i = 10val s = "i = $i" // 识别为 "i = 10"
模版表达式同样可以用于由三个引号包裹的String,如下面的,${"$"}
表示$符号
val price = """${'$'}9.99"""
- Kotlin学习(四): 基本类型(Basic Types)
- Kotlin-04.基本类型/数据类型(Basic Types)
- Kotlin Reference (四) Basic Types
- Kotlin的学习日志(一)Basic Types
- Go 的基本类型有Basic types
- Kotlin学习(5):基本类型
- Kotlin学习-基本类型(三)
- GLib中文文档 — GLib基本类型(Basic Types )
- Kotlin学习笔记——基本类型
- kotlin 官方学习教程之基本类型
- 学习kotlin第五天_kotlin基本类型
- Kotlin学习笔记一基本类型
- Kotlin编码规范和基本类型--kotlin官方文档学习
- 基本类型 primitive types
- 《Basic Types Module》学习笔记
- kotlin学习笔记(四)
- kotlin学习笔记(四)
- kotlin学习笔记(四)
- Portlet 通信时候的选取
- 解决ubunto下firefox无法在线观看视频的问题
- JavaWeb-Servlet3.0新特性-注解
- 找第n个默尼森数实现
- Microsoft SQL Server学习(六)--查询语句
- Kotlin学习(四): 基本类型(Basic Types)
- 数据分析介绍之九——双变量建立关系之平滑噪音
- 排除节假日的功能
- [BZOJ3531][SDOI2014]旅行(树剖+线段树)
- 第四届广东省网络安全技术及成果展示会简记
- opencv2.4.13配置VS2015(永久配置)
- ElasticSearch
- 齐次坐标的理解
- Launcher3分析之拖动图标的流程