Kotlin基本类型

QuibblerQuibbler 2020-06-07 约 9 分钟 1929 次阅读

Kotlin基本类型

Kotlin没有基础数据类型,但是封装了6种数值类型,分别是Double、Float、Long、Int、Short、Byte。此外还有字符类型Char。

1、Number

Kotlin中定义的6中数值类型都继承自Number父类。父类定义如下,定义了7中方法,

public abstract class Number public constructor() {
	    public abstract fun toByte(): kotlin.Byte
	    public abstract fun toChar(): kotlin.Char
	    public abstract fun toDouble(): kotlin.Double
	    public abstract fun toFloat(): kotlin.Float
	    public abstract fun toInt(): kotlin.Int
	    public abstract fun toLong(): kotlin.Long
	    public abstract fun toShort(): kotlin.Short
	}

也就是Kotlin中所有的数值类型都可以调用上面的方法转换。

2、常量

在《Kotlin基本语法》中介绍了变量,现在了解一下什么是常量。常量是不可变的字面值。

例:

//Int类型数值常量
    val num: Int = 0x1000
    
    //Boolean
    val are: Boolean = false
    
    //Long类型常量。结尾大写L 或 不加L
    val time: Long = 100L

3、类型转换

前面说到数值类型继承自Number,提供了7种方法相互之间转换。

public fun toByte()
	public fun toChar()
	public fun toDouble()
	public fun toFloat()
	public fun toInt()
	public fun toLong()
	public fun toShort()

例:

//Int转换成Byte
    var big: Int = 10000
    var b: Byte = big.toByte()

而且也不能像Java那样,高精度的赋值给低精度自动截取,都是需要手动转换的,否则报错。比如将Long赋给Int不行的,将Int赋给Long是更不行。

4、相等比较 

一个等号=是赋值的意识,比较用的是==或者===

4.1、比较值:==

两个等号 == 用来比较变量的值是否相等。

例:

var a: Int? = 20000
    var b: Int? = 20000
    println(a == b)

4.2、比较地址:===

使用三个等号:=== 比较对象的地址是否指向同一个位置。

例:自动装箱,相同的值但是地址不同,结果为false

var b: Int? = 20000
    var c: Int? = 20000
    println(b === c)

但是如果不自动装箱,输出的结果则为true,指向相同的地址。猜测是在常量池中。

var b: Int = 20000
    var c: Int = 20000
    println(b === c)

        需要可空引用时,即类型?,数字、字符会被装箱。

5、Char字符

单引号 ' 括起来的字符,比如'0'、'z'。

5.1、Char->Int

Char字符类型不能和Int类型直接操作(比如加减),这一点和Java有区别。可以转成Int

var c: Char = '0'
    var num = c.toInt()
    //值为48

5.2、Int->Char

Int值专为Char字符,直接调用toChar()即可。具体内部如何转换不得而知,但是似乎不会抛出异常,及时Int值多大。

var num = 9999999
    num.toChar()
    //值为'陿'

6、Boolean

计算机最基本的类型了,就是true和fale。空的Boolean使用Boolean?装箱即可。

常用的Boolean运算符:&&(与)、||(或)、!(非)

7、Array数组

Kotlin中数组类型为Array。除了基本的Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高。

7.1、生成数组

①使用arrayOf函数

//使用Array指明变量为数组类型时,必须指明数组模板类型。这里数组存储的为Int类型
    var array: Array<Int> = arrayOf(1, 1, 2)
    
    //自动类型推断
    var array1 = arrayOf(1, 1, 2)

②使用Array构造方法,Array构造方法定义如下:

/**
     * Creates a new array with the specified [size], where each element is calculated by calling the specified
     * [init] function.
     *
     * The function [init] is called for each array element sequentially starting from the first one.
     * It should return the value for an array element given its index.
     */
    public inline constructor(size: Int, init: (Int) -> T)

例:

var array: Array<Int> = Array(3, { i -> (i * 2) })
    //数组:[0,2,4]

7.2、数组元素

使用下标运算符[]直接访问数组指定位置的元素,内部是调用get(index: Int): T方法实现的

var array: Array<Int> = arrayOf(1, 1, 2)
    var v = array[2]

而给数组中指定位置赋值,内部则又是调用set(index: Int, value: T)方法实现

array[1] = 2

8、String字符串

和Java中的字符串一样,多一个编辑特性,三引号 """ ,括起来的字符支持多行字符串。编辑器默认加上trimIndent()方法

val text = """
        你好,Kotlin
    """.trimIndent()

此外还有trimMargin()方法

/**
  * 修剪源字符串的每一行中的前导空格字符,后跟[marginPrefix],
  * 如果它们是空白的,则删除第一行和最后一行(注意,空白与空白是不同的)。
  *
  * 如果除第一行和最后一行空白行外不包含[marginPrefix],则不会影响该行。
  *
  * 不保留原始的行尾。
  */
public fun String.trimMargin(marginPrefix: String = "|"): String =
    replaceIndentByMargin("", marginPrefix)

学习资料:

        Kotlin 基本数据类型

       Java常量:Java常量的定义和分类

相关推荐

Parcelize:Parcelable 实现生成器
Kotlin

Parcelize:Parcelable 实现生成器

Parcelize:Parcelable 实现生成器Parcelable是安卓开发中常用的序列化方式,之前分享过一个Parcelable序列化插件,方便开发者快速生成代码,提高开发效率。1、Parcelize插件Kotlin官方也推出一个Parcelable自动生成的Gradle插件:Parcelize。1.1、引入插件在项目的build.gradle中添加:id("kotlin-parceliz

2.6k
Kotlin的继承
Kotlin

Kotlin的继承

Kotlin的继承1、超类:Any类似于Java中的Object类,Kotlin也有一个叫Any的超类,是所有类的父类,所有类都默认继承自该类。超类的定义如下,其中定义了三个函数:2、open注意上面的Any类用open修饰,表示该类可以被继承。Kotlin中的类默认都是final的,无法被继承:如果想让类可以被继承,就需要用在定义类的地方用open关键字标识该类可以被继承。3、构造器继承中涉及到

2.1k
 Kotlin基本语法
Kotlin

Kotlin基本语法

Kotlin基本语法了解Kotlin语言的基本语法。1、包kotlin文件以.kt结尾,编译文件还是如此只不过在文件名后面加上Kt后缀。这一点和Java不同,Java源文件.java,编译后为.class文件。1.1、包定义每个kotlin文件的第一行就用关键字package定义该文件所在的包。例:1.2、导包用到其它kotlin文件需要使用关键字import导入,这一点和Java一样。kotli

2.1k