kotlin基本数据类型

在 Kotlin 中,所有东西都是对象,在这个意义上讲我们可以在任何变量上调用成员函数和属性。Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于Java的是,字符不属于数值类型,是一个独立的数据类型。

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,值相等
}

这里我把 a 的值换成 100,这里应该跟 Java 中是一样的,在范围是 [-128, 127] 之间并不会创建新的对象,比较输出的都是 true,从 128 开始,比较的结果才为 false。

java和kotlin都是一样的:

btye 1个字节
short 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节

类型转换

byte – (short , char) – int – long – float – double
较小的类型不能隐式转换为较大的类型(而java中是可以隐式的自动类型转化的)

java中
自动类型转换:由优先级低的数据类型转向优先级高的数据类型。 
        举例:char  c = 10 ; 
             int b = c ; 
             long d = c ; 

强制类型转换:由优先级高的数据类型转向优先级低的数据类型。 
        举例: float  f = 3 ; 
              int  a = f ; (编译器会报错),正确的写法是:int  a  =(int) f ; 
很显然,这样的转换可能会导致数据溢出或是精度下降。
kotlin中
较小的类型不能隐式转换为较大的类型

val b: Byte = 1 // OK, 字面值是静态检测的
val i: Int = b // 错误

val b: Byte = 1 // OK, 字面值是静态检测的
val i: Int = b.toInt() // OK

每种数据类型都有下面的这些方法,可以转化为其它的类型:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char

字面常量

数值常量字面值有以下几种:

十进制: 123
Long 类型用大写 L 标记: 123L
十六进制: 0x0F
二进制: 0b00001011
注意: 不支持八进制

Kotlin 同样支持浮点数的常规表示方法:

默认 double:123.5、123.5e10
Float 用 f 或者 F 标记: 123.5f

字符

和 Java 不一样,Kotlin 中的 Char 不能直接和数字操作,Char 必需是单引号”包含起来的。比如普通字符 ‘0’,’a’。

数组

数组用类 Array 实现,并且还有一个 size 属性及 get 和 set 方法,由于使用 [] 重载了 get 和 set 方法,所以我们可以通过下标很方便的获取或者设置数组对应位置的值。
与 Java 不同的是,Kotlin 中数组是不型变的(invariant)。
[] 运算符代表调用成员函数 get() 和 set()。
数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数。

fun main(args: Array<String>) {
//数组的创建(数组不可变)
    //一种是使用函数arrayOf();
    val a= arrayOf(1,3,3)

    //另外一种是使用工厂函数,接受数组大小和一个函数参数,用作参数的函数能够返回给定索引的每个元素初始值
    val b=Array(3, { i -> (i * 2) })//i取0,1,2

//for 循环
    for ( c in a.indices){
        println("a[$c]="+a[c])
    }
    for (d in b.indices){
        println("b[$d]="+b[d])
    }
输出:
a[0]=1
a[1]=3
a[2]=3
b[0]=0
b[1]=2
b[2]=4
}
    原文作者:芒果味的你呀
    原文地址: https://www.jianshu.com/p/bbb0659b1aa4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞