Kotlin:基本类型 - 数值

内置数值类型

Kotlin和Java的数值类型很接近,内置了6中数值类型:

Double:64
Float:32
Long:64
Int:32
Short:16
Byte:8

在Java里,char类型也是一种数值类型,可以和其他数值类型转换,而在Kotlin则没有把char类型作为数值类型。

字面量

整数

整数类型:Shot,Int和Long。和Java一样,Long类型的字面量在数字后面加上L来表示。 

整数支持十进制,十六进制以及二进制的表示方式,不支八进制。

  • 十进制:十进制直接使用数字,123
  • 十六进制:在数字前加上0x,0xF0
  • 二进制:在数字前加上0b,0b101010

浮点型

浮点型类型:Float和Double。默认的浮点型为Double类型,Float类型在数字后面添加f。

  • Double:123.5, 123.5e10
  • Float:123.5f

下划线(Kotlin1.1开始)

为了增强数值的可读性,可以使用下划线隔开数字:

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

表现

在Kotlin里,所有的数值类型都是包装类型。这与Java的数值类型可以在基本类型或包装类型之间选择使用是不同的。

使用包装类型做数值比较时表现会有所不同。

全等比较(===)

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

虽然boxedA和anotherBoxedA都是赋值为a,全等比较的是对象,两者为不同对象,所有全等比较为false。

相等比较(==)

val a: Int = 10000
print(a == a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA == anotherBoxedA) // Prints 'true'

相等比较的是数值,boxedA和anotherBoxedA相等。

显式转换

Kotlin里不支持直接把小类型的数值赋值给大类型的数值

val b: Byte = 1 // OK, literals are checked statically
val i: Int = b // ERROR

如果要把小类型的数值赋值给大类型的数值,需要显式转换。

val i: Int = b.toInt() // OK: explicitly widened

相关显式转换的方法:

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

隐式转换

但需要注意的是,Kotlin也是存在隐式转换,在做数值运算时会有这样的转换:

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

Long和Int相加,得到的结果为Long。

运算

Kotlin支持标准的算术运算符,而且这些运算符可以使用函数重载。

例如:

  • a + b:a.plus(b)
  • a - b:a.minus(b)
  • a * b:a.times(b)
  • a / b:a.div(b)
  • a % b:a.rem(b)
  • a..b:a.rangeTo(b)

但是位运算符是没有对象的符号,使用的是函数。例如

val x = (1 shl 2) and 0x000FF000

这里1左移两位,对应Java里的1<<2。

完整的位运算函数如下:

  • shl(bits) – 有符号左移(Java的 <<)
  • shr(bits) – 有符号右移 (Java的 >>)
  • ushr(bits) – 无符号右移 (Java的 >>>)
  • and(bits) – 按位与
  • or(bits) – 按位或
  • xor(bits) – 按位异或
  • inv() – 按位取反

版权声明:著作权归作者所有。

相关推荐

Python : 数值以及数值运算

数值类型Python的数值类型包括:整数int ,浮点数float和复数。其他的数值类型包括:Decimal和分数Fraction。int:整数不限精度float:Python里的浮点数使用C语言的double实现,其精度由运行的系统决定,可以使用sys.float_info查看精度信息。复数:复数的虚数部分有j或J表示,如1+2j。其中实数和虚数的数值部分使用浮点数表示,它们可以使用z

Kotlin:基本类型 - 字符串

Kotlin字符串使用String表示类型,为不可变类型。字符串表示字符串有两种表示方式:单行和多行。 单行单行使用双引号把内容括起来。val s = “Hello,World” 如果需要在单行里表示换行的字符串需要对换行符转义val s = “Hello, World \n” 多行多行用来表示原始的字符串,

Kotlin:基本类型 - Char与Boolean

字符类型Kotlin使用Char表示字符,与Java不同的是,它并不能直接和数字做类型转换。字符表示它们使用单引号''把字符括起来特殊字符:特殊字符串使用反斜杠开头,如\t, \b, \n, \r, \', \", \\ and \$其他一些字符可以使用Unicode编码,如'\uFF00'数字转换Kotlin的字符不能直接和数字做类型转换,但我们可以它们的unicode码的相对差来做数

Kotlin:数组的基本操作

Kotlin使用Array类来表示数组,构造函数为:<init> Array(size: Int, init: (Int) -> T) size:数组大小init:初始化数组创建数组Kotlin提供了几种方法方便我们创建数组,包括:构造函数,标准库提供的arrayOf, arrayOfNulls 和emptyArray等 。构造函数// 创建 一个值

TypeScript:基本类型详解

布尔值(Boolean)TypeScript的布尔值和JavaScript一样有两个值:true和false。类型标识:boolean示例:let isDone: boolean = false; 数字(Number)和JavaScript一样,TypeScript的所有数字都是用浮点数表示,支持二进制,八进制,十进制以及十六进制的表示方式,类型标识:num

Java 数值相等判断详解(特别注意包装类型之间的比较)

Java数值类型分为基本类型,包装类型。基本类型:byte、short、 int、long、float和double包装类型:Byte、Short、Integer、Long、Float和Double数值比较可分为基本类型之间比较,基本类型与包装类类型比较,包装类型之间的比较。基本类型比较基本类型之间只能使用“==”做相等比较。比较结果就是数值是否相等。int a=1,