您的位置:首页 > 其它

Step into Kotlin - 02 - 数据类型

2015-06-26 12:19 399 查看
目录

Basic Types
概要

Numbers
分类

Literal Constants

Representation

Explicit Conversions

语法

字面量

为什么不支持自动向上转型

Operations

Characters

Booleans

String
Usage

Templates

摘要

显示转换,String templates

Basic Types

概要

Kotlin 中一切皆是对象

Numbers

分类

与 Java 相似,但是 Kotlin 没有自动向上转型( 如 Java 中的 int 可以自动向上转型为 long )。

TypeBitwidth
Double64
Float32
Long64
Int32
Short16
Byte8
Kotlin 中字符不是 Number

Literal Constants

Decimals: 123

Longs are tagged by a capital L: 123L

Hexadecimals: 0x0F

Binaries: 0b00001011

Long 结尾不能为小写的
l


Kotlin 不支持 8 进制字面常量

Representation

数字的装箱操作不会保持相同性,但是会保持相等性

val a: Int = 10000
val boxedA: Int? = a
val anotherBoxedA: Int? = a
println(a identityEquals a) // Prints 'true'
println(boxedA identityEquals anotherBoxedA) // !!!Prints 'false'!!!

println(a == a) // Prints 'true'
println(boxedA == anotherBoxedA) // Prints 'true'


Explicit Conversions

语法

所有 Number 类型都支持类似 toByte(),toInt() 这样的显示转换的方法。



val a:Int = 1
// val b:Long = a 错误,不支持自动向上转型
val b:Long = a.toInt()


字面量

字面量可以根据上下文推导类型,所以可以不用显示转换

val a:Byte = 1
val b:Long = 1
b = 1.toLong() + 2 //Long + Int => Long


为什么不支持自动向上转型

因为 Kotlin 最终会被编译为 Java 代码,比如说

val a:Int = 2   // java.lang.Integer a = 2
// 如果支持向上转型
val b:Long = a  // java.lang.Long b = a


假设支持向上转型,那么 a 就可以赋值给 b,这样
a==b
表达式会返回 false,因为两者类型不同,而这种错误只有在运行时才会发现。

Kotlin 通过强制使用类型转换,使编译时就能发现这种错误,从而提高了程序的安全性。

Operations

Kotlin 支持标准的操作符,并且在对应的类上定义为成员方法。

常用操作

shl(bits) – 有符号左移 (Java’s <<)

shr(bits) – 有符号右移 (Java’s >>)

ushr(bits) – 无符号右移 (Java’s >>>)

and(bits) – 按位与

or(bits) – 按位或

xor(bits) – 按位异或

inv() – 按位取反



val b = 1 shl 2 //4


Characters

Char 使用单引号
''
来声明,不能直接当做数字来使用,需要使用 toInt()等方法

val c: Char = 'a'


Booleans

Boolean 值为
true
或者
false


val flag: Boolean = true && false


String

Usage

val s = "Hello World"
for (x in s) {
print(x)    //  Hello World
}


Templates

String templates 可以使用变量值来替换字符串中的值

val name = "Peter"
val str = "name=$name, $name.length, ${name.length()}"
println(str)    //  name=Peter, Peter.length, 5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: