Kotlin入门第三课:数据类型

前文链接:

Kotlin学习第一课:从对比Java开始

Kotlin入门第二课:集合操作

初次尝试用Kotlin实现Android项目

Kotlin的数据类型与Java类似,因此这篇文章主要看Kotlin的几点改变(改进)。

1、内置数据类型

Double--64位    Float--32位

Long--64位        Int--32位

Short--16位       Byte--8位

Kotlin中字符型不再是基础类型,下面会进行介绍。

1.1 类型名称

类型只有首字母大写1种名称,如32位整型为Int,Java是int和Integer并存。

Kotlin只有一种形式:

1 var vInt: Int = 5

这样的改变会让开发者更加高效,不用多花精力在不同场景下切换使用的类型。

Java支持封箱和拆箱:

1 int vint = 5;
2 Integer vInt = vint;
3 vint = vInt;

Java中具体化泛型等情况下是必须要用Integer类型的,一般的整型变量用int即可,Kotlin现在统一使用Int。

1.2 类型转换

类型之间不能进行隐式转换,Java是允许的。

Kotlin代码第2-5行是编译不过的:

1 var vInt: Int = 5
2 var vLong: Long = vInt
3 var vLong: Long = (Long) vInt
4 vInt = vLong
5 vInt = (Int) vLong

错误信息:The integer literal does not conform to the expected type Int。

对Kotlin了解地越多,越会发现它的安全性,尽量用显示的代码来实现明确的需求,不明确或隐式的部分越少越好。

Java代码只有第4行不能编译通过:

1 int vint = 5;
2 long vlong = vint;
3 vlong = (long) vint;
4 vint = vlong;
5 vint = (int) vlong;

Java中将类型从小到大进行隐式(或显示)转换属于正常赋值操作,从大到小只允许显示转换,但也可能会出现数据范围溢出问题。

对于类型之间的显示转换,Kotlin提供了以下方法:

toDouble(): Double    toFloat(): Float

toLong(): Long           toInt(): Int

toShort(): Short          toByte(): Byte

toChar(): Char             toString(): String

后面2个方法涉及到字符和字串,也就是说这8种数据类型可以相互转换。

Kotlin中的变量都是作为对象处理,所以连内置数据类型都有方法和属性。

以Int和Long为例,相互转换的代码:

1 var vInt: Int = 97
2 var vLong: Long = 98
3 vInt = vLong.toInt()
4 vLong = vInt.toLong()

注意不同类型各自的数值范围不同,特别是Byte、Char及Short这种小范围的数据类型。因为如果将数值从大类型转换为小类型时,可能会出现范围溢出问题,但是并不会提示什么错误信息,而是以"循环"的方式计算结果值,这当然是不正确的结果。

1 var vLong: Long = 128
2 var vByte: Byte = vLong.toByte()

Byte的长度和范围分别是8位和-128~127,当类型Long的128转为Byte时,超过最大值127的部分为1,所以继续向后移一个值作为结果,即-128。

还有就是String类型,当内容不是纯数值时,转换为数值会报错。

1 var vStr: String = "123asd"
2 var vInt: Int = vStr.toInt()

错误信息:Exception in thread "main" java.lang.NumberFormatException: For input string: "123asd"。

2. 字符类型Char

Kotlin中Char类型(16位)不是基础类型,主要体现在和整型的关系上,Java中字符型和整型是可以隐式赋值和比较的,但Kotlin不行。

Java代码,vBool得到的值是true:

1 boolean vBool = ‘a‘ == 97;

Kotlin代码,不能编译通过:

1 var vBool: Boolean = ‘c‘ == 97

错误信息:Operator ‘==‘ cannot be applied to ‘Char‘ and ‘Int‘。

3. 布尔类型Boolean

可取值true或false,内置有&&、||及!三种逻辑操作,还有一个toString()方法。

4. 数组类型Arrays

Kotlin数组的定义方式更加简洁,下面代码定义了Int和String两个类型的数组。

1 val intArray: IntArray = intArrayOf(1, 2, 3)
2 val strArray = Array(5, { i -> (i * i).toString() })

通过索引方式([index])访问数组元素,如intArray[0]的值为1。

5. 字串类型String

Kotlin字串类型的定义和用法和Java类似,赋值的内容也是不能改变的。

1 var vStr: String = "123asd"

但是字符的获取除了get()方法,还可以直接用索引方式([index]),如vStr[3]的值为字符‘a‘。

另外,还可以通过foreach的形式来遍历字串,而Java是不能通过foereah遍历String类型变量的。

1 val vStr: String = "123asd"
2 for (c in vStr) {
3     println(c)
4 }

代码将字串中的字符挨个输出,结果为:

1
2
3
a
s
d
时间: 2024-10-29 03:56:09

Kotlin入门第三课:数据类型的相关文章

Spring入门第三课

属性注入 属性注入就是通过setter方法注入Bean的属性值或依赖的对象. 属性植入使用<property>元素,使用name属性指定Bean的属性名称,value属性或者<value>子节点指定属性值 属性注入是实际应用中最常用的注入方式. 构造方法注入 通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例化以后就可以使用. 构造器注入在<constructor-arg>元素里申明属性,<constructor-arg>中没有name属性

java入门第三步之数据库连接【转】

数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Database Connectivity(开放数据库连接性):基于C语言的一套数据库编程接口,主要功能是提供数据库的访问和操作所有的数据库厂商对这套接口进行实现,不同数据库厂商提供的实现是不一样的,也就是通常所说的第三方支持,而这套编程接口就是我们的标准 2.JDBC——Java Database Conn

jQuery入门第三

jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复杂的操作 * -选择器 * -筛选 * -CSS * -属性 * -文档 * -事件 * -Ajax(Django) <style> td{ border:1px solid black; } td{ width:70px; height:20px; } p{ width:70px; height

Linux零基础入门第四课

根据直播讲义整理的内容,从第四课开始.前三课的内容若后面有精力会一并整理进来. 文件的基本操作(上) 创建.删除.复制.移动和重命名 touch命令创建文件 语法 >$ touch file0 [file1 file2 ...] >$ touch file{0..9}.txt touch命令可以创建空文件,将文件名作为参数即可.传递多个文件名可同时创建多个文件. 若使用 file{0..9} 作为参数,将自动创建10个空文件,名字分别为file0.txt.file1.txt.....file9

Spring入门第三十课

基于XML的方式配置事务 直接看代码: package logan.study.spring.tx.xml; public interface BookShopDao { //根据书号获取书的单价 public int findBookPriceIsbn(String isbn); //更新书的库存,使书号对应的库存-1 public void updateBookStock(String isbn); public void updateUserAccount(String username,

解析Mybatis入门第三天

目的:使用mybatis对数据的一些标签的使用和表与表之间的一对多和多对一的查询方式. 例如:if.where.foreach 前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的Maven工程可以参考入门第一天的详解).    数据库的使用和前两天的一样,除此之外,新添加两张表,方便后面对一对多和多对一的操作打基础. 同样先查看整个项目的结构: 开始进入代码编辑... 在前两次的使用的数据库的基础上创建两张表. CREATE TABLE `account` ( `ID` i

struts入门第三结

一.package配置 1.认知:<package>元素可以把逻辑上相关的一组Action.Result.Intercepter等元素封装起来,形成一个独立        的模块,package可以继承其他的package,也可以作为父包被其他的package继承,比如"<package                    name="FirstStruts"  extends="struts-default">"中,F

Cocos2d-HTML5入门第三天

第二天掠过,不要在意细节. 第三天了,目前只搭了个hello world版本,而且换了三个版本,到现在仍旧不知道怎么开发游戏. 在上一篇文章搭建的基础上,分析一下结构. 抛开游戏不说,只谈b/s的b,顺着一开始的入口index.html页面. 眼前一个标准的H5页面 一个html5的新标签canvas,俩个js文件. 打开第一个文件cocos2d/cocos2d-html5/CCBoot.js 2千多行代码,粗略从头读到尾巴,发现里边无非就是定义了一个cc的命名空间,当做全局变量对象,这个cc对

NodeJS 入门第三天(Express框架)

一.Express框架 Express框架是后台的Node框架,所以和jQuery.zepto.yui.bootstrap都不一个东西. Express在后台的受欢迎的程度,和jQuery一样,就是企业的事实上的标准. ● 原生Node开发,会发现有很多问题.比如: ■ 呈递静态页面很不方便,需要处理每个HTTP请求,还要考虑304问题 ■ 路由处理代码不直观清晰,需要写很多正则表达式和字符串函数 ■ 不能集中精力写业务,要考虑很多其他的东西 我们自己可以把第一天的作业,就是那个静态文件服务给封