【Kotlin】Kotlin基本数据类型

1 变量声明

Kotlin 复制代码
var a : Int // 声明整数类型变量
var b : Int = 1 // 声明整数类型变量, 同时赋初值为1
var c = 1 // 声明整数类型变量, 同时赋初值为1
val d = 1 // 声明整数类型常量, 值为1(后面不能改变d的值)

变量命名规范如下。

  • 变量名可以由字母、数字、下划线(_)和美元符号($)组成,但是不能以数字开头,且大小写敏感。
  • 不能有空格、@、#、+、-、/ 等符号。
  • 应该使用有意义的名称,达到见名知意的目的,最好以小写字母开头。
  • 不能与 Kotlin 语言的关键字或是基本数据类型重名。

2 基本数据类型

2.1 空类型

Kotlin 中空类型使用 Unit 表示,等价与 Java 中的 void。

1)Unit 的定义

Kotlin 复制代码
public object Unit {
    override fun toString() = "kotlin.Unit"
}

2)Unit 作为变量使用

Kotlin 复制代码
fun main() {
    var a : Unit = Unit
    println(a) // kotlin.Unit
}

3)Unit 作为函数返回值使用

Kotlin 复制代码
fun myFun() : Unit {
    println("定义一个没有返回值的函数")
}

说明:当函数无返回值时,可以省略 Unit。

2.2 数字类型

2.2.1 整数类型

类型 大小(位) 最小值 最大值 案例
Byte 8 -128 127 var a: Byte = 1 var a = 1 val a = 0b1001 // 二进制 val a = 0xAF // 十六进制
Short 16 -32768 32767 var a: Short = 1 var a = 1
Int 32 -2,147,483,648 (-2^31) 2,147,483,648(2^31-1) var a: Int = 1 var a = 1 var a = 1_000_000
Long 64 -9,223,372,036,854,775,808(-2^63) 9,223,372,036,854,775,807 (2^63-1) var a: Long = 1L var a = 1L
UByte 8 0 255 var a: UByte = 1u var a = 1u
UShort 16 0 65535 var a: UShort = 1u var a = 1u
UInt 32 0 4,294,967,295 (2^32-1) var a: UInt = 1u var a = 1u
ULong 64 0 18,446,744,073,709,551,615 (2^64-1) var a: ULong = 1uL var a = 1uL var a = 0xFFF_FFF_FFFuL

进制表示如下。

Kotlin 复制代码
// 二进制
val a = 0b1001 // 0b是二进制前缀, 1001对应十进制的9

// 十六进制
val a = 0xAF // 0x是十六进制前缀, AF对应十进制的31

注意:Kotlin 没有八进制前缀表示。

2.2.2 浮点类型

类型 大小(位) 符号位(S)/ 阶码(E)/ 尾数(M) 最小值/ 最大值/ 最小正数 有效位数 案例
Float 32 1S + 8E + 23M -3.4028235E38 3.4028235E38 1.4E-45 6 var a: Float = 1.0F var a = 1.0F var a = 1.0f
Double 64 1S + 11E + 52M -1.7976931348623157E308 1.7976931348623157E308 4.9E-324 15 var a: Double = 1.0 var a = 1.0

浮点数编码原理详见 → 浮点数编码原理

2.2.3 运算符

运算符 描述 作用域 优先级 案例
+ 加法 整数/浮点数 作为一元运算符时,优先级为1 作为二元运算符时,优先级为3 1 + 2 = 3
- 减法 整数/浮点数 作为一元运算符时,优先级为1 作为二元运算符时,优先级为3 1 - 2 = -1
* 乘法 整数/浮点数 2 2 * 3 = 6
/ 整除/除法 整数/浮点数 2 3 / 2 = 1 3.0 / 2 = 1.5 3 / 2.0 = 1.5
% 取余 整数/浮点数 2 7 % 3 = 1
++ 加1 整数/浮点数 1 a++(先使用, 后加1) ++a(先加1, 后使用)
-- 减1 整数/浮点数 1 a--(先使用, 后减1) --a(先减1, 后使用)
= 赋值 所有类型 9 a = 1
+= 加赋值 整数/浮点数 9 a += 1 ⇔ a = a + 1
-= 减赋值 整数/浮点数 9 a -= 2 ⇔ a = a - 2
*= 乘赋值 整数/浮点数 9 a *= 3 ⇔ a = a * 3
/= 除赋值 整数/浮点数 9 a /= 4 ⇔ a = a / 4
%= 取余赋值 整数/浮点数 9 a %= 5⇔ a = a % 5
shl 有符号左移 Int/Long 4 3 shl 1 = 6 -1 shl 1 = -2 -3 shl 1 = -6
shr 有符号右移 Int/Long 4 3 shr 1 = 1 -1 shr 1 = -1 -3 shr 1 = -2
ushr 无符号右移 Int/Long 4 3 ushr 1 = 1 -1 ushr 1 = 2147483647 -3 ushr 1 = 2147483646
and 按位与 Int/Long 5 // 1001 and 0011 = 0001 9 and 3 = 1
or 按位或 Int/Long 6 // 1001 or 0011 = 1011 9 or 3 = 11
xor 按位异或 Int/Long 7 // 1001 xor 0011 = 1010 9 or 3 = 10
inv 按位取反 Int/Long 1 9.inv() = -10 (-1).inv() = 0 (-3).inv() = 2
.. 闭区间 整数 8 1..4 // 1, 2, 3, 4
..< 左开右闭区间 整数 8 1..<4 // 1, 2, 3
until 左开右闭区间 整数 8 1 until 4 // 1, 2, 3

2.3 布尔类型

2.3.1 布尔类型

类型 大小(位) 取值 案例
Boolean 1 true / false var a: Boolean = true var a = false

2.3.2 运算符

运算符 描述 作用域 优先级 案例
== 等于 整数/布尔/字符 1 1 == 2 // false 1 == 1 // true
!= 不等于 整数/布尔/字符 1 1 != 2 // true 1 != 1 // false
< 小于 整数/浮点数/字符 1 1 < 2 // true
> 大于 整数/浮点数/字符 1 1 > 2 // false
<= 小于等于 整数/字符 1 1 <= 2 // true
>= 大于等于 整数/字符 1 1 >= 2 // false
in 在范围内 整数/字符 1 3 in 1..9 // true
!in 不在范围内 整数/字符 1 3 !in 1..9 // false
! 布尔 2 !true // false !false // true
&& 布尔 3 true && false // false
|| 布尔 4 true || false // true

2.4 字符类型

2.4.1 字符类型

类型 大小(位) 案例
Char 16 var a: Char = 'A' var a = 'A' var a = '好' var a = '\u725B' // 牛 var a = Char(66) // B var a = 'A' + 4 // E 'A'.code // 65

2.4.2 转义字符

Kotlin 复制代码
\t ------ Tab制表符
\b ------ 退格
\n ------ 换行(LF)
\r ------ 回车(CR)
\' ------ 单引号
\" ------ 双引号
\\ ------ 反斜杠
\$ ------ 美元符号

2.5 字符串类型

2.5.1 字符串的定义

Kotlin 复制代码
var str1 : String = "abc"
var str2 = "abc"
var str3 = "abc" + "def" // "abcdef"
// 原始字符串
var str4  = """
        第一行
        第二行
        第三行
    """
// 字符串模板
var count = 15
var str5 = "买了${count}个苹果" // 买了15个苹果

通过下标即可访问字符串中元素,如下。

Kotlin 复制代码
var str = "abc"
var c1 = str[0] // 'a'
var c2 = str.elementAt(1) // 'b'

2.5.2 字符串函数

Kotlin 中 String 类继承 CharSequence 类,在 _String.kt、StringsJVM.kt、StringNumberConversionsJVM.kt 等文件中定义了一些 CharSequence、String 的扩展函数。

1)判空

Kotlin 复制代码
// length == 0
public inline fun CharSequence.isEmpty(): Boolean
// length > 0
public inline fun CharSequence.isNotEmpty(): Boolean
// this == null || this.length == 0
public inline fun CharSequence?.isNullOrEmpty(): Boolean
// length == 0 || indices.all { this[it].isWhitespace() }
public actual fun CharSequence.isBlank(): Boolean
// !isBlank()
public inline fun CharSequence.isNotBlank(): Boolean
// this == null || this.isBlank()
public inline fun CharSequence?.isNullOrBlank(): Boolean

2)去掉首位空字符

Kotlin 复制代码
public inline fun String.trim(): String

3)查找字符

Kotlin 复制代码
public expect fun CharSequence.elementAt(index: Int): Char
public inline fun CharSequence.find(predicate: (Char) -> Boolean): Char
public inline fun CharSequence.findLast(predicate: (Char) -> Boolean): Char
public fun CharSequence.first(): Char
public inline fun CharSequence.first(predicate: (Char) -> Boolean): Char
public fun CharSequence.last(): Char
public inline fun CharSequence.last(predicate: (Char) -> Boolean): Char
public inline fun CharSequence.random(): Char

4)查找字符索引

Kotlin 复制代码
public inline fun CharSequence.indexOfFirst(predicate: (Char) -> Boolean): Int
public inline fun CharSequence.indexOfLast(predicate: (Char) -> Boolean): Int

5)过滤字符

Kotlin 复制代码
public inline fun String.filter(predicate: (Char) -> Boolean): String
public inline fun String.filterIndexed(predicate: (index: Int, Char) -> Boolean): String
public inline fun String.filterNot(predicate: (Char) -> Boolean): String

6)统计字符个数

Kotlin 复制代码
// 返回length
public inline fun CharSequence.count(): Int
// 统计字符串中满足条件的字符个数
public inline fun CharSequence.count(predicate: (Char) -> Boolean): Int

7)字符串匹配

Kotlin 复制代码
// 判断字符串是否以xxx开头
public fun CharSequence.startsWith(char: Char, ignoreCase: Boolean = false): Boolean
public fun CharSequence.startsWith(prefix: CharSequence, ignoreCase: Boolean = false): Boolean
public fun CharSequence.startsWith(prefix: CharSequence, startIndex: Int, ignoreCase: Boolean = false): Boolean
// 判断字符串是否以xxx结尾
public fun CharSequence.endsWith(char: Char, ignoreCase: Boolean = false): Boolean
public fun CharSequence.endsWith(suffix: CharSequence, ignoreCase: Boolean = false): Boolean

8)获取子串

Kotlin 复制代码
public inline fun CharSequence.substring(startIndex: Int, endIndex: Int = length): String
public fun String.substring(range: IntRange): String
public fun String.slice(indices: IntRange): String
public fun String.take(n: Int): String
public fun String.takeLast(n: Int): String

9)字符串分割

Kotlin 复制代码
public fun CharSequence.split(vararg delimiters: Char, ignoreCase: Boolean = false, limit: Int = 0): List<String>
public fun CharSequence.split(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): List<String>

说明:字符串分割支持正则匹配,详见 → 正则表达式(Regular Expression)详解

10)字串替换

Kotlin 复制代码
// 替换所有匹配的字符或字符串
public actual fun String.replace(oldChar: Char, newChar: Char, ignoreCase: Boolean = false): String
public actual fun String.replace(oldValue: String, newValue: String, ignoreCase: Boolean = false): String
// 替换第一个匹配的字符或字符串
public actual fun String.replaceFirst(oldChar: Char, newChar: Char, ignoreCase: Boolean = false): String
public actual fun String.replaceFirst(oldValue: String, newValue: String, ignoreCase: Boolean = false): String
// 将第一个匹配的字符或字符串前面的字符串替换为指定字符或字符串
public fun String.replaceBefore(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String
public fun String.replaceBefore(delimiter: String, replacement: String, missingDelimiterValue: String = this): String
// 将第一个匹配的字符或字符串后面的字符串替换为指定字符或字符串
public fun String.replaceAfter(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String
public fun String.replaceAfter(delimiter: String, replacement: String, missingDelimiterValue: String = this): String
// 将指定索引范围的字符串替换为新字符串
public inline fun String.replaceRange(startIndex: Int, endIndex: Int, replacement: CharSequence): String
public inline fun String.replaceRange(range: IntRange, replacement: CharSequence): String

说明:字符串替换支持正则匹配,详见 → 正则表达式(Regular Expression)详解

11)字符串反转

Kotlin 复制代码
public inline fun String.reversed(): String

12)大小写转换

Kotlin 复制代码
// 转为大写字符串, locale可以传入Locale.ROOT
public inline fun String.uppercase(locale: Locale): String
// 转为小写字符串, locale可以传入Locale.ROOT
public inline fun String.lowercase(locale: Locale): String

13)数据类型转换

Kotlin 复制代码
public actual inline fun String.toInt(): Int
public actual inline fun String.toLong(): Long
public actual inline fun String.toFloat(): Float
public actual inline fun String.toDouble(): Double
public inline fun String.toBigInteger(): java.math.BigInteger
public inline fun String.toBigDecimal(): java.math.BigDecimal
相关推荐
yzpyzp7 小时前
如果后台的Long类型的数据返回是null,那么Android客户端的数据bean的kotlin的Long类型的字段接受到数据后是null空指针吗?
android·kotlin
xvch11 小时前
Kotlin 2.1.0 入门教程(二十五)类型擦除
android·kotlin
有点感觉2 天前
Android级联选择器,下拉菜单
kotlin
zhangphil2 天前
Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(1)
android·kotlin
xvch2 天前
Kotlin 2.1.0 入门教程(二十三)泛型、泛型约束、协变、逆变、不变
android·kotlin
xvch4 天前
Kotlin 2.1.0 入门教程(二十四)泛型、泛型约束、绝对非空类型、下划线运算符
android·kotlin
zhangphil4 天前
Android Coil ImageLoader MemoryCache设置Key与复用内存缓存,Kotlin
android·kotlin
mmsx4 天前
kotlin Java 使用ArrayList.add() ,set()前面所有值被 覆盖 的问题
android·开发语言·kotlin
lavins4 天前
android studio kotlin项目build时候提示错误 Unknown Kotlin JVM target: 21
jvm·kotlin·android studio
面向未来_5 天前
JAVA Kotlin Androd 使用String.format()格式化日期
java·开发语言·kotlin