随笔 - 262  文章 - 0  评论 - 5  阅读 - 20万

kotlin基本数据类型

Kotlin基本数据类型

1 Kotlin是面向对象,基本把java的所剩的一点不是面向对象的东西规避了。在Kotlin中所有基本数据类型都装箱使用。

2 数字型(Numbers)

2.1 字面常量

2.1.1 下面是所有类型的字面常量:

2.1.2 小数(Decimals):123

2.1.3 长整型以大写的L结尾:123L

2.1.4 16进制以0x开头:0x0F

2.1.5 2进制以0b开头:0b00001011

2.2 声明

2.2.1 变量

var

var a =100

var a:Int=100

var a:Int? a=100

好玩的 a=100_234

var f=1.234f var d=1.234

2.2.2 常量

val

你可以使用下划线使数字常量更易读:

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

val PI:Float=3.1_415926F

val PI2:Double = 3.145926

val A=1000 val PI=3.1_415926

小数点左右不支持下划线

2.3 java不具有的

2.3.1 val bb:Any = 100_000_000.00_00f

数字中间可以加下划线,用来更好的辨识

2.4 进制

2.4.1 支持10 ,16, 2进制

0x 表示16进制

0b 二进制

2.4.2 不支持8进制

2.5 装箱

2.5.1 在kotlin中全部使用包装类操作

Double 64

Float 32

Long 64

Int 32

Short 16

Byte 8

2.5.2 所有的数字类型(Number)都支持一下的转换:

toByte(): Byte

toShort(): Short

toInt(): Int

toLong(): Long

toFloat(): Float

toDouble(): Double

toChar(): Char

2.5.3 类型转换

因为都是包装类,基本不能隐式转换

不能把 Byte 型值赋给一个 Int 变量。 val b: Byte = 1 // OK, 字面值是静态检测的 val i: Int = b // 错误 我们可以代用其toInt()方法。 val b: Byte = 1 // OK, 字面值是静态检测的 val i: Int = b.toInt() // OK




java中小值赋给大值也不行

通过以上类型转换后使用

2.5.4 比较两个数字

比较两个数字 Kotlin 中没有基础数据类型,只有封装的数字类型,你每定义的一个变量,其实 Kotlin 帮你封装了一个对象,这样可以保证不会出现空指针。数字类型也一样,所有在比较两个数字的时候, 就有比较数据大小和比较两个对象是否相同的区别了。 在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小

例: fun main(args: Array<String>) {    val a: Int = 10000    println(a === a) // true,值相等,对象地址相等    //经过了装箱,创建了两个不同的对象    val boxedA: Int? = a    val anotherBoxedA: Int? = a    //虽然经过了装箱,但是值是相等的,都是10000    println(boxedA === anotherBoxedA) //  false,值相等,对象地址不一样    println(boxedA == anotherBoxedA) // true,值相等 }

2.5.5 位操作符

shl(bits) – 左移位 (Java’s <<)

shr(bits) – 右移位 (Java’s >>)

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

and(bits) – 与

or(bits) – 或

xor(bits) – 异或

inv() – 反向

3 字符

3.1 和 Java 不一样,Kotlin 中的 Char 不能直接和数字操作,Char 必需是单引号''包含起来的。比如普通字符 '0','a'。 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() // 显式转换为数字 } 当需要可空引用时,像数字、字符会被装箱。装箱操作不会保留同一性。

4 Boolean

4.1 布尔用 Boolean 类型表示,它有两个值:true 和 false。 若需要可空引用布尔会被装箱。 内置的布尔运算有: || –  或 && –与 ! - 非

5 和 Java 一样,String 是可不变的

5.1 支持三个引号 """ 扩起来的字符串,支持多行字符串,比如: fun main(args: Array<String>) {    val text = """    多行字符串    多行字符串    """    println(text)   // 输出有一些前置空格 }

5.2 方括号 [] 语法可以很方便的获取字符串中的某个字符

5.3 字符串是由 String 表示的。字符串是不变的。字符串的元素可以通过索引操作读取: s[i] 。字符串可以用 for 循环迭代: for (c in str) { println(c) } 字符串字面量 Kotlin 有两种类型的字符串字面量:一种是可以带分割符的,一种是可以包含新行以及任意文本的。带分割符的 string 很像 java 的 string: val s = "Hello World!\n" 转义是使用传统的反斜线的方式。参见Characters,以获得支持的转义序列。 整行String 是由三个引号包裹的("""),不可以包含分割符但可以包含其它字符: val text = """ 你可以通过trim-margin()函数移除空格: val text = """ |Tell me and I forget. |Teach me and I remember. |Involve me and I learn. |(Benjamin Franklin) """.trimMargin() 字符串模板 字符串可以包含模板表达式,即可求值的代码片段,并将其结果连接到字符串中。一个模板表达式由一个 $ 开始并包含另一个简单的名称: val i = 10val s = "i = $i" // 求值为 "i = 10" 或者是一个带大括号的表达式: val s = "abc"val str = "$s.length is ${s.length}" // 求值为 "abc.length is 3" 模板既可以原始字符串中使用,也可以在转义字符串中使用。如果需要在原始字符串(不支持反斜杠转义)中表示一个文字$字符,那么可以使用以下语法: val price = """

6 数组

6.1 数组用类 Array 实现,并且还有一个 size 属性及 get 和 set 方法,由于使用 [] 重载了 get 和 set 方法,所以我们可以通过下标很方便的获取或者设置数组对应位置的值。 数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数。如下所示,我们分别是两种方式创建了两个数组: fun main(args: Array<String>) {    //[1,2,3]    val a = arrayOf(1, 2, 3)    //[0,2,4]    val b = Array(3, { i -> (i * 2) })    //读取数组内容    println(a[0])    // 输出结果:1    println(b[1])    // 输出结果:2 } 如上所述,[] 运算符代表调用成员函数 get() 和 set()。 注意: 与 Java 不同的是,Kotlin 中数组是不型变的(invariant)。 除了类Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高,其用法同Array一样: val x: IntArray = intArrayOf(1, 2, 3) x[0] = x[1] + x[2]

 

posted on   wp7ers  阅读(628)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示