设为首页 加入收藏

TOP

KOTLIN开发语言文档(官方文档) -- 2.基本概念(一)
2017-10-12 10:08:09 】 浏览:6794
Tags:KOTLIN 开发 语言 文档 官方 基本 概念

网页链接:https://kotlinlang.org/docs/reference/basic-types.html

2.   基本概念

2.1.  基本类型

从可以在任何变量处理调用成员函数和属性角度来说,在Kotlin开发语言中,一切都是对象。有些类型是内嵌的,它们的实现进行过优化,用户看到的仍是原始类。在这节中,我们说明大部分这些类型:数字,字符,布尔和数组。

2.1.1.   数字

Kotlin开发语言处理数组的方法类似Java开发语言,但是也有差别。例如,没有隐含的数字扩宽的转换,并且在相同的情况下,文字也有些不同。

Kotlin开发语言提供下列内嵌类型表示数字(这是类似Java开发语言):

类型

位宽度

Double

64

Float

32

Long

64

Int

32

Short

16

Byte

8

 

 

 

 

 

 

 

 

 

 

注意,在Kotlin开发语言中,字符不属于数组。

2.1.1.1. 文字常数

对于整数值有下面几种文字常数:

—— 十进制数:123

—— 附加大写字母L标准长整数:123L

—— 十六进制数:0x0F

—— 二进制数:0b00001011

注意:不支持八进制数字。

Kotlin开发语言还支持通用的浮点数表示法:

—— 默认是双精度:123.5,123.5e10

—— 附加f或F表示单精度浮点数:123.5F

2.1.1.2. 表示法

在Java开发语言平台上,数字是作为JVM基本类型进行物理存在的,除非需要一个可null数字引用(如:Int?)或包含在泛型。后一种情况下,是将数字装箱的。

注意数字装箱不保持一致性:

1 val a: Int = 10000
2 print(a === a) // 打印 'true'
3 val boxedA: Int? = a
4 val anotherBoxedA: Int? = a
5 print(boxedA === anotherBoxedA) // !!!打印 'false'!!!

而另一方面,却保持相等:

1 val a: Int = 10000
2 print(a == a) // 打印 'true'
3 val boxedA: Int? = a
4 val anotherBoxedA: Int? = a
5 print(boxedA == anotherBoxedA) // 打印 'true'

2.1.1.3. 显式转换

由于不同的表示法,较小类型不是较大类型的子类型。如果是,就有下列麻烦了:

1 // 假设代码,没有实际编译:
2 val a: Int? = 1 // 装箱为Int (java.lang.Integer)
3 val b: Long? = a // 隐含转换装箱为Long (java.lang.Long)
4 print(a == b) // 令人惊讶! 当equals()检查其它部分不是Long,就打印"false"

所以不仅仅是一致性,而且即使相当也会在此默默丢失一部分。

这样,较小的类型不会隐含的转换为较大的类型。这就是说,如果没有进行明确的类型转换,Byte类型值是不能赋值给Int类型变量。

1 val b: Byte = 1 // OK, 静态文字检查
2 val i: Int = b // 错误

可以进行明确(显式)的数字宽度转换:

1 val i: Int = b.toInt() // OK: 显式宽度转换

每项数字类型支持下列转换:

toByte(): Byte

—toShort(): Short

—toInt(): Int

—toLong(): Long

—toFloat(): Float

—toDouble(): Double

—toChar(): Char

因为类型是从上下文推断,以及适当的转换重载了算术运算符,所以隐式转换缺位是很少引人注目的,例如:

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

2.1.1.4. 运算

Kotlin开发语言支持对数字标准的一套运算,它们被声明为相应类成员(但是,编译器优化调用的相应指令)。查看:运算符重载(5.6)。

作为位运算,对于它们没有特殊特性(字符),仅仅命名函数使其能以中缀方式被调用,如:

1 val x = (1 shl 2) and 0x000FF000

这是完整的位运算列表(仅仅对Int和Long类型有效):

— shl(bits) – signed shift left (Java’s <<)

— shr(bits) – signed shift right (Java’s >>)

— ushr(bits) – unsigned shift right (Java’s >>>)

— and(bits) – bitwise and

— or(bits) – bitwise or

— xor(bits) – bitwise xor

— inv() – bitwise inversion

2.1.2.   字符

char类型表示字符。它们不能直接作为数组处理:

1 fun check(c: Char) {
2   if (c == 1) { // ERROR: incompatible types
3     // ...
4   }
5 }

字符文字是在单引号中:’1’,’\n’,’\uFF00’。我们能够明确地转换字符到Int数字:

1 fun decimalDigitValue(c: Char): Int {
2   if (c !in '0'..'9')
3     throw IllegalArgumentException("Out of range")
4   return c.toInt() - '0'.toInt() // Explicit conversions to numbers
5 }

在需要可null引用时,像数字、字符是被装箱。装箱操作是不保证一致性的。

2.1.3.   布尔值

Boolean类型表示布尔值,它有两个值:true和false。

如果需要可null引用时,布尔值可以被装箱的。

布尔值的内置的运算包括:

— || – lazy分离 (注:这个“lazy”不知道怎样翻译好,就是 “或”为啥要这样?)

— && – lazy连接

— ! – 非

2.1.4.   数组

在Kotlin开发语言中,Array类表示数组,它有get和set函数(即通过操作符重载约定转成[]),有size属性,以及其他一些有用的成员函数:

1 class Array<T> private constructor() {
2   val size: Int
3   fun get(index: Int): T
4   fun set(index: Int, value: T): Unit
5 
6   fun iterator(): Iterator<T>
7   // ...
8 }

可以用库函数arrayOf(),将数组各项的数值传递给它,来创建一个数组,如:arrayOf(1,2,3)创建数组[1,2,3]。或者,用arrayOfNulls()库函数创建一个指定尺寸(size)的数组,其元素均填充为nu

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android线程管理(二)——Activi.. 下一篇Android学习笔记--远程服务的使用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目