欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

详解 Kotlin Reference Basic Types, String, Array and Imports

程序员文章站 2023-12-12 18:04:10
详解 kotlin reference  basic types, string, array and imports 基本数据类型 kotlin中支持的基本...

详解 kotlin reference  basic types, string, array and imports

基本数据类型

kotlin中支持的基本数据类型及它所占bit宽度:

type bit width
double 64
float 32
long 64
int 32
short 16
byte 8

char 在kotlin中 并不是一个数值类型 

kotlin不支持8进制, 支持 2、10、16进制

下面的代码,示例了:

关于2、10、16进制;

使用下划线在数值常量赋值数据中;

使用==和===进行比较;

基本数据类型间的类型转换方法toxxx;

位移操作;

字符,转义符

package com.stone.basic.types


/**
 * desc : 基本数据类型 按位操作符
 * author: stone
 * email : aa86799@163.com
 * time : 30/05/2017 19 14
 */

fun basic() {
  var intvalue = 7777
  var floatvalue1 = 8.3f
  var floatvalue2 = 10.45f
  var doublevalue = 9.99
  var longvalue = 1l
//  var longvalue = 1l //不能用 小写l后缀
  var hexvalue = 0xa8a8a8a8a8a8a8a //hexadecimals 0x或0x开头
  println("hexvalue: ${hexvalue > int.max_value}")
  var doublevalue2 = 1.3e24 //科学记数法 1.3*10^24
  println("1e24 / (10^20) : ${doublevalue2 / math.pow(10.0, 20.0)}")
  val binaryvalue = 0b00001011 //以 0b或0b 开头
  println("binaryvalue : $binaryvalue")

  /*
  不像java中 有一个基本类型 float 对应一个 装箱类型 float
  kotlin中只有 后者
  kotlin中 都能 对应一个 空检查的 装箱类型,即后面加问号: t?
   */
}

//使用下划线在数值常量赋值数据中,增加可读性
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

fun equal() {
  val a: int = 10000
  val b: int = 10000
  println("1 : ${a === b}") // prints 'true'
  val boxeda: int? = a
  val anotherboxeda: int? = a
  println("2 : ${boxeda === anotherboxeda}") // !!!prints 'false'!!!
  println("3 : ${boxeda == anotherboxeda}") // prints 'true'


//  val c: int? = 1
//  val d: long? = c // c 不能赋值给 d
//  println("4 : ${c == d}") // int 和 long不能 相比

  //像 上面这样的 隐式转换 都行不通的, 只能使用如下明确转换方式: to方法
  val e: int = 1
  val f: long = e.tolong()
  /*
  - tobyte(): byte
  — toshort(): short
  — toint(): int
  — tolong(): long
  — tofloat(): float
  — todouble(): double
  — tochar(): char
   */

  //类型推断
  val l = 1l + 3 // long + int => long
}

fun bitwise() {
  val r = 1 shl 2 and 0x000ff000
  /*
  bitwise operations 按位操作符:
  — shl(bits) – signed shift left (java's << )
  — shr(bits) – signed shift right (java's >> )
  — ushr(bits) – unsigned shift right (java's >>> )
  — and(bits) – bitwise and (&)
  — or(bits) – bitwise or  (|)
  — xor(bits) – bitwise xor (^)
  — inv() – bitwise inversion (!)
   */
}

fun charoperation() {
  val str = "stone"
  for (c in str) {
    println("char in str : $c")
    val r = c + 3
//    if (r == 118) {//不能如此操作:char 在kotlin中 并不是一个数值类型
//      println(r)
//    }
    if (r.toint() == 118) {//可以用toint() 来进行比较
      println("符合条件的字符$r, 原始字符串的字符是${r - 3}")
    }

    fun decimaldigitvalue(c: char): int {
      if (c !in '0'..'9')
        throw illegalargumentexception("out of range")
      return c.toint() - '0'.toint() // explicit conversions to numbers
    }
//    decimaldigitvalue('x')
    decimaldigitvalue('6')
  }

  /*
   类似'1'这样单引号中一个字符的定义就是一个 char
   支持使用\转义: \t , \b , \n , \r , \' , \" , \\ and \$
   unicode字符: '\uff00'
   */
}

fun booleanoperation() {
  val b: boolean = !true
  /* 支持的操作符: || 、 && 、 ! */
}

fun main(args: array<string>) {

  basic()

  equal()

  charoperation()


}

 string type

package com.stone.basic.types

/**
 * desc :
 * author: stone
 * email : aa86799@163.com
 * time : 30/05/2017 20 48
 */
fun main(args: array<string>) {
  /* 使用三个双引号开头与结尾, 中间可以包含 任何 非转义字符 */
  val text = """
|tell me and i forget.
|teach me and i remember.
|involve me and i learn.
|(benjamin franklin)
>admin""".trim().trimmargin().trimmargin(">") //trimmargin 去掉前缀,默认以|作margin前缀,也可以指定前缀
  println(text)

  var s = "abc"
  var str = "$s.length is ${s.length}"

  val price = """${'$'}9.99${"\t"}一杯果汁"""
  println(price)
}

array type

package com.stone.basic.types

import java.util.*

/**
 * desc :
 * author: stone
 * email : aa86799@163.com
 * time : 30/05/2017 20 48
 */
fun main(args: array<string>) {

  val ary = arrayof(1, 3, 2) //使用arrayof 创建数组

//  val asc = array(5, { i -> (i * i).tostring() })
  val asc = array(5, { i -> math.random() }) //使用构造函数创建数组:后面的lambda参数,表示设置每个index上的元素
  for (it in asc) {
//    println(it == "1")
    println(it)
  }

  val ary2 = arrayofnulls<long>(2) //每个数组元素中 填充一个null值
  for (i in ary2.indices) {//indices 返回一个 索引范围 : intrange
    ary2[i] = 3l + random().nextint(10)
    println("ary2[$i] : ${ary2[i]}") //[] 可以用于 get 和 set 操作
  }

  val ary3 = doublearrayof(1.0, 2.2, 3.3) //基本数据类型都对应有一个 xxarrayof函数
}

import

package com.stone.basic.imports

import kotlin.*
//import static java.lang.math //kotlin 不支持

/*
默认import kotlin file :
— kotlin.*
— kotlin.annotation.*
— kotlin.collections.*
— kotlin.comparisons.* (since 1.1)
— kotlin.io.*
— kotlin.ranges.*
— kotlin.sequences.*
— kotlin.text.*

还有 kotlin— jvm:
— java.lang.*
— kotlin.jvm.*

//kotlin 不支持 静态方法导入
 */

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

上一篇:

下一篇: