前文链接:

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支持封箱和拆箱:

 int vint = ;
Integer vInt = vint;
vint = vInt;

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

1.2 类型转换

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

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

 var vInt: Int =
var vLong: Long = vInt
var vLong: Long = (Long) vInt
vInt = vLong
vInt = (Int) vLong

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

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

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

 int vint = ;
long vlong = vint;
vlong = (long) vint;
vint = vlong;
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为例,相互转换的代码:

 var vInt: Int =
var vLong: Long =
vInt = vLong.toInt()
vLong = vInt.toLong()

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

 var vLong: Long =
var vByte: Byte = vLong.toByte()

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

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

 var vStr: String = "123asd"
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:

 boolean vBool = 'a' == ;

Kotlin代码,不能编译通过:

 var vBool: Boolean = 'c' == 

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

3. 布尔类型Boolean

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

4. 数组类型Arrays

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

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

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

5. 字串类型String

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

 var vStr: String = "123asd"

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

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

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

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


a
s
d

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

  1. Kotlin入门第四课:简单工厂模式

    Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...

  2. Spring入门第三课

    属性注入 属性注入就是通过setter方法注入Bean的属性值或依赖的对象. 属性植入使用<property>元素,使用name属性指定Bean的属性名称,value属性或者<val ...

  3. jQuery入门第三

    jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...

  4. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  5. Linux零基础入门第四课

    根据直播讲义整理的内容,从第四课开始.前三课的内容若后面有精力会一并整理进来. 文件的基本操作(上) 创建.删除.复制.移动和重命名 touch命令创建文件 语法 >$ touch file0 ...

  6. Spring入门第三十课

    基于XML的方式配置事务 直接看代码: package logan.study.spring.tx.xml; public interface BookShopDao { //根据书号获取书的单价 p ...

  7. MySQL入门第三天(上)——函数与视图

    一.MySQL函数 同样的,完整的函数可以参照开源中国的手册:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh 1.字符函数 CONCAT ...

  8. 解析Mybatis入门第三天

    目的:使用mybatis对数据的一些标签的使用和表与表之间的一对多和多对一的查询方式. 例如:if.where.foreach 前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的 ...

  9. java入门第三步之数据库连接

    数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...

随机推荐

  1. C#基础语法(一)

    一.基础语法 1.C#区分大小写,所以myVar和MyVar是两个不同的变量. 2.每个C#可执行文件(如控制台应用程序,Windows应用程序和Windows服务)都必须有一个入口点----Main ...

  2. 淘宝内部分享:怎么跳出MySQL的10个大坑

    编者按:淘宝自从2010开始规模使用MySQL,替换了之前商品.交易.用户等原基于IOE方案的核心数据库,目前已部署数千台规模.同时和Oracle, Percona, Mariadb等上游厂商有良好合 ...

  3. Azure WAF防火墙工作原理分析和配置向导

    Azure WAF工作原理分析和配置向导 本文博客地址为:http://www.cnblogs.com/taosha/p/6716434.html ,转载请保留出处,多谢! 本地数据中心往云端迁移的的 ...

  4. SQL基础增删改查

    一.基础语句介绍 SQL 可以分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 1.数据操作语言(DML)基本指令: select       从数据表中获取数据(现阶阶段,二次开发常用) ...

  5. Python实现二叉树的四种遍历

    对于一个没学过数据结构这门课程的编程菜鸟来说,自己能理解数据结构中的相关概念,但是自己动手通过Python,C++来实现它们却总感觉有些吃力.递归,指针,类这些知识点感觉自己应用的不够灵活,这是自己以 ...

  6. Html5浏览器支持

    HTML5 浏览器支持 把 HTML5 元素定义为块级元素 语义块级displayblock实例 header, section, footer, aside, nav, main, article, ...

  7. 老司机带你开飞机 一: mssql on linux 安装指导

    通常在本机开发环境中需要搭建所有的服务,还要修改本地的hosts,实在是不胜其烦.如今有了docker,完全不用污染本地环境,且看老司机带你搭建一个asp.net core的开发环境集群.愿你走出虚拟 ...

  8. CodeVS1344 线型网络

    题目描述 Description 有 N ( <=20 ) 台 PC 放在机房内,现在要求由你选定一台 PC,用共 N-1 条网线从这台机器开始一台接一台地依次连接他们,最后接到哪个以及连接的顺 ...

  9. 一条sql语句引发mysql不停创建临时表的问题解决..coping to tmp table on desk

    (不懂临时表的先看 MySQL临时表 ) 首先,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间.因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表.     ...

  10. sublime text 3文件标题无法显示中文的解决办法

    前言 你是否遇也到了sublime文件标题无法显示中文的问题呢?如下列图片所示: 解决办法 1.点击菜单栏Preferences - > Settings. 打开下图: 2.在右边User内加入 ...