Kotlin入门第三课:数据类型
前文链接:
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入门第三课:数据类型的更多相关文章
- Kotlin入门第四课:简单工厂模式
Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...
- Spring入门第三课
属性注入 属性注入就是通过setter方法注入Bean的属性值或依赖的对象. 属性植入使用<property>元素,使用name属性指定Bean的属性名称,value属性或者<val ...
- jQuery入门第三
jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...
- JavaMail入门第三篇 发送邮件
JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...
- Linux零基础入门第四课
根据直播讲义整理的内容,从第四课开始.前三课的内容若后面有精力会一并整理进来. 文件的基本操作(上) 创建.删除.复制.移动和重命名 touch命令创建文件 语法 >$ touch file0 ...
- Spring入门第三十课
基于XML的方式配置事务 直接看代码: package logan.study.spring.tx.xml; public interface BookShopDao { //根据书号获取书的单价 p ...
- MySQL入门第三天(上)——函数与视图
一.MySQL函数 同样的,完整的函数可以参照开源中国的手册:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh 1.字符函数 CONCAT ...
- 解析Mybatis入门第三天
目的:使用mybatis对数据的一些标签的使用和表与表之间的一对多和多对一的查询方式. 例如:if.where.foreach 前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的 ...
- java入门第三步之数据库连接
数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...
随机推荐
- JavaScript中数组类型的属性和方法
除了Object,Array类型应该是ECMAScript中最常用的类型了. ECMAScript的数组虽然也是数据的有序列表,但还是与其他语言中的数组有很大的区别.比如ECMAScript数组每一项 ...
- struts2自定义日期类型转换器
在java web表单中提交的数据难免会有日期类型,struts2支持的日期类型是yyyy-MM-dd,如果是其他格式,就需要自己进行转换.比如yy-MM-dd 要完成自己定义的转换需要完成. 主要的 ...
- 自动化构建工具gulp简单介绍及使用
一.简介及安装: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快 ...
- 第五章 HQL实用技术
第五章 HQL实用技术5.1 使用HQL查询语句(面向对象查询语句) 5.1.1 编写HQL语句 5.1.1.1 from子句 例:fr ...
- angular apply
<div ng-controller="firstController"> {{date}} </div> <script> var first ...
- 浅析JS中的模块规范AMD和CMD
一.AMD AMD就只有一个接口:define(id?,dependencies?,factory); 它要在声明模块的时候制定所有的依赖(dep),并且还要当做形参传到factory中,像这样: d ...
- 纯JS单页面赛车游戏代码分享
分享一个以前写的小游戏,纯js游戏,代码很简单.欢迎大家来喷呦! 效果图: 代码展示://直接复制到html文件即可 支持IE9+版本 <!DOCTYPE html> <html&g ...
- [进程管理]Load和CPU利用率是如何算出来的
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.penglixun.com/tech/system/how_to_ca ...
- 纯HTML课表
table标签构造课表 table标签常用于制作表格以及简单布局,于是我就玩了下table标签,用table标签也能构造出很漂亮的页面呢,虽然在博客页面加入与实际打开页面稍微有点出入,但还是可以接受的 ...
- selenium + python 登录页面,输入账号、密码,元素定位问题
示例简介: 要求:登录QQ邮箱,输入账号.密码 出现问题:页面中含有iframe框架,因此直接进行元素的查找与操作,出现找不到元素的现象,首先需进行iframe框架的转换,使用switch_to_fr ...