kotlin基本数据类型

作者: 芒果味的你呀 | 来源:发表于2017-10-13 15:19 被阅读50次

    在 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
    }
    

    相关文章

      网友评论

        本文标题:kotlin基本数据类型

        本文链接:https://www.haomeiwen.com/subject/wrgwyxtx.html