Kotlin---------------基础类型

numbers类型:

数字类型的数据有Byte,Short,Float,Int,Long,Double,这些类型在java中也都是基础数据类型。

与java不同之处在于:

  • Char类型已经不再是数字类型了。
  • 在java之中基础数据类型都对应有一个包装类,如int,对应Integer,而在kotlin中基础数据类型已经是类类型的了。
  • 不同类型的数字之间不能自动转换,需要明确调用相应的方法。有一系列的转换方法,toShort,toByte,toInt……想转成什么类型,就调用对应的toXX()方法即可
  • 支持二进制(0b1111),十进制(123456),十六进制(0xFFFF00),但是不支持八进制。
  • 数字之间允许用下划线分割,更方便阅读
  • 位运算符不在是>>,<<,>>>,<<<,&,!,~,|,Kotlin中用的是一个叫做中缀表达式的玩意儿
    var a: Int = 100
    var b: Short = 10
    a = b//error require Int,found Short
    a = b.toInt()

  //数字之间可以添加下划线,方便阅读  var c: Int = 1000_1000_1000  var d: Int = 0b11111_1111  var e: Int = 0xFF_FF_FF_FF

  var f: Char = 1//error Char类型必须以‘‘包起来  var g: Char = ‘a‘

  //位运算
  tempValue1 shl 2 //<<2  tempValue1 shr 2//>>2  tempValue1 ushr 2//>>>2 我相信没有有人会好奇咋没有<<<2吧?如果你好奇了,我也不会告诉你为啥  tempValue1 and tempValue2// tempValue1 & tempValue2  tempValue1 or tempValue2// tempValue1 |tempValue2  tempValue1 xor tempValue2// tempValue1 ^ tempValue2  tempValue1.inv()// ~tempValue1

与java相同之处在于:

  • 依旧没有原生提供unsigned无符号数据类型。
  • 数据类型长度是一样的,Char(8),Short(16),Int(32),Float(32),Long(64),Double(64)
  • 虽然Kotlin中数字类型是类类型,但是申明数字类型变量依旧和java类似:val a: Int = 1,var b:Short = 1,Float类型变量后面要加f/F,Long类型后面只能加L,小l会编译不通过

那么在Kotlin中是怎么把有符号转成无符号的数据类型的呢,方法如下(Java中也是一样的):

fun getUnsignedByte(value: Byte): Int {
    return value.toInt() and 0xFF
}

fun getUnsignedShort(value: Short):Int{
    return value.toInt() and 0xFFFF
}

fun getUnsignedInt(value: Int): Long{
    return value.toLong() and 0xFFFFFFFF
}

上面分别是将有符号Byte,Short,Int转成对应的无符号数据,so,不要再喷Kotlin和Java的数据类型不完整啦,没有无符号类型啦,巧妙运用位运算,有符号转无符号,so easy!

(写到这个so easy,就想起最近隔壁组的项目经理老提起步步高点读机那个广告中的小姑娘高考考的分数很低的梗)

Char类型

为什么要单独说一下这个Char类型,上面已经提到过,在Kotlin中Char已经不再是数字类型

fun check(c: Char) {
    if( c == 1){
        //error: Operator ‘==‘ cannot be applied to ‘Char‘ and ‘Int‘
    }
}

//正确申明char变量的姿势:var char1: Char = ‘a‘//咋把Char转成Int呀?上面说咯,toInt即可var a: Int = ‘a‘.toInt()

Bool类型

就2个只true,false

&&,||,!运算规则和Java相同

Array类型

数组的申明在Kotlin中是迥异于Java的,数组现在变成了一个泛型类。这意味着只能放同类型对象了。对数组调用下表运算符[]其实是利用了运算符重载的特性

  var tempArray2: Array<Int> = Array(5, { i -> i * i })//利用数组的构造函数
    var tempArray: Array<Int> = arrayOf(1, 2, 3)//利用库函数申明一个函数
    var tempArray1: Array<Int?> = kotlin.arrayOfNulls<Int>(100)//申明100个元素的空数组
    var tempArray5: Array<Long> = tempArray//error 不能相互转换

Kotlin库还提供了一些对于特定类型数据的Array类,如ByteArray,ShortArray,IntArray等等。

String类型

var str1: String = "Hello,Kotlin"//单行字符串
var multiStr:String = """
    啦啦啦啦
啦啦啦
嘿嘿嘿
"""//多行字符串

string类型最大的不同就在于模板字符串咯

 var id: Int = 1
 var name: String = "liuliqianxiao"
 var result: String = "the id is $id and the name is $name"//还记得在java中怎么拼字符串吗
 var result1: String = "the name`s length is ${name.length}"//可以在${}的大括号中写入表达式

是不是感觉模板字符串很好用呢?

好吧,这篇Kotlin中基础类型就简单写到这里咯,这里对比了一些Java,有可能写的不对,也有可能新时代的java已经不是我描述的酱紫了。错误之处依旧请不留情面的指出来。

时间: 2024-10-07 14:38:58

Kotlin---------------基础类型的相关文章

Kotlin基础-类型检查和转换

/** 检查:对一个变量的类型进行辨别* 转换:把变量转换成其他类型使用* */fun main(args: Array<String>) { val a=5 val b=6 val c=if (a>b)"大于" else a-b //类型判断:is if (c is String) println(c.length) if (c !is String ) println(" 整数:$c") //Kotlin编辑器大多数时候智能转换 if (c i

Kotlin基础(五)Kotlin的类型系统

Kotlin的类型系统 一.可空类型 1 //s为null的话编译器会报错,没问号不能为空 2 fun strLen(s : String)=s.length 3 //如果允许s为空可: 4 fun strLen2(s : String?) : Int{ 5 if (s!=null) return s.length 6 else return 0 7 } 8 /* 9 注意可空类型和不可空类型只是在编译期做的 10 检查不同,runtime这两者并无区别 11 */ 12 13 14 //"?.

Typescript学习笔记(一)基础类型

为了面向ng2和前端未来,开始搞向ts,ts是微软出的一枚语言,作为es6的超集,他出的一些特性还是蛮好用的(略坑).对于我等纯前端(从开始就接触javascript)的人来说,真想说,这特么什么鬼.部分特性同es6(个人对es6还是蛮有好感的).ts同期的coffeescript,将js python化,ts也把js搞的向其他语言靠拢.. 中文学习,这里是英文学习.如果不想看这些东西,那看我笔记学吧.哈哈. ts的基础类型,布尔值,数字,字符串,数组,元组(Tuple),枚举,任意值,空值.后

玩转JavaScript OOP[0]&mdash;&mdash;基础类型

前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统的. 编程语言和技术的结合使用,就像一个男人娶了好几个妞一样.在旧的时代,.NET是大房,JavaScript是偏房.大房是"后宫之主",不仅要操持家业,还能给你生娃,娃将来也要继承家业的.偏房就没那么幸运了,在"后宫"没什么地位,虽然衣食无忧,但不能管理家族事务,生的

【Go入门教程2】内置基础类型(Boolean、数值、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值

这小节我们将要介绍如何定义变量.常量.Go内置类型以及Go程序设计中的一些技巧. 定义变量 Go语言里面定义变量有多种方式. 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面: // 定义一个名称为“variableName”,类型为"type"的变量 var variableName type 定义多个变量 // 定义三个类型都是“type”的变量 var vname1, vname2, vname3 type 定义变量并初始化值 // 初始化

java基础类型包装类与自动打包解包

一基础类型包装类 基础数据类型存放在内存的栈区域,可以通过包装类将基础数据类型转换为引用数据类型,即存储在堆与栈中. 基础数据类型一共有8种,相对应的包装类也有8种.分别是Byte,Short,Integer,Long,Float,Double,Character,Boolean.类 包装类位于java.Lang包中. 1 public class Test1 { 2 3 public static void main(String[] args) { 4 // TODO Auto-genera

第二十一篇 Java 数据类型的定义 ,以及基础类型的自动转换和强制转换

大家好,今天呢我吧我所学到的一些知识点共享给大家,希望大家看完之后,要是有什么不懂的,请随时联系我,要是觉得我写的不是很好的 ,还希望你们能够谅解一下,因为小弟我刚学会写博客也没多久,很多格式和方法都不是很完善,希望大家多多包涵,好了 废话就不多说了,来谈一下今天我所学到的一些知识点吧: 今天我主要是学到了一些Java中的数据类型,其中,Java中的数据类型分为俩类------基础数据类和逻辑数据类,下面我所介绍的都是基本数据类的一些分类,至于逻辑类,由于使用次数过少,所以今天就不再这里多做介绍

自学HIBERNATE5.0文档第一季之基础类型篇

2.3. Basic Types Basic value types usually map a single database column, to a single, non-aggregated Java type. Hibernate provides a number of built-in basic types, which follow the natural mappings recommended by the JDBC specifications. Internally

TypeScript系列2-手册-基础类型

基础类型(Basic Types) 我们提供一些基础类型,比如数字(numbers).字符串(strings).结构(structures),布尔值(Boolean)等等.在TypeScript中,我们支持JavaScript中相同的类型,还提供枚举类型. Boolean 最基础的数据类型是true/false值,JavaScript和TypeScript以及其他语言把它叫做'boolean'类型. var isDone: boolean = false; Number 跟JavaScript一

Scala学习 - 基础类型

Scala中的类型相对于Java来说,与.net的想法更为接近,所有的类型都是基于一个基础类型,包括值类型也是继承自该类型: Java中值类型是语言直接提供的,这点上有点不同: 类型关系图如下: 其中所有类型的基类与Any Any之后分为两个AnyVal与AnyRef 其中AnyVal是所有值类型的父类型 AnyRef是所有引用类型的父类型 与其他语言稍微有点不同的是,Scala还定义了底类型 其中Null类型是所有引用类型的底类型,及所有AnyRef的类型的空值都是Null 而Nothing是