Kotlin基础教程之数据类型
作者:天命剑主 发布时间:2023-12-06 15:23:22
Kotlin基础教程之数据类型
一切都是对象.
在Kotlin中一切都是对象.Kotlin有一些基本类型Boolean,Byte,Shot,Int,Long,Float,Double
在Kotlin中没有原始类型,以上这些类型都是对象,比如
运行结果如下
Kotlin支持16进制字面值,二进制字面值和科学记数法,官方文档中没有提到8进制
所有基本的几个数据类型不会进行显式类型转换,这一点尤为重要!那么如何进行转换呢?如下:
可以使用toLong,toInt,toShort,toChar等函数进行转换,不仅如此,数组Array<>也是对象,不但可以通过asList函数转换为List对象,数组类甚至包含了一个用于计算平均值的average函数.实际上Kotlin数组真的很像Collection(虽然Array并没有实现Collection接口).数组类还有其他很多函数,现在初学Kotlin还并不清楚用途.Kotlin毕竟太新,能找到的教程几乎只有一本英文的官方文档.(如果我能学完的话那么我的这些blog或许也能成为教程.)
我们还看到了一些有趣的东西,比如在字符串中使用${}进行替换,字符串中的代码会被执行,最后的结果 * 入到字符串中,这一点简直和Unix Shell脚本里面的替换语法如出一辙,想来Kotlin也是受到了很多语言的启发.
这段代码运行结果如下
关于数组的初始化,也很有趣,如下:
前面已经说过了arrayOf()函数可以创建一个数组,Kotlin自动判断类型,比如x就是Array<String>类型,那么y是什么类型呢?
y最后会变成Array<Comparable<out Any?>>类型,Comparable是一个表示"可比较"含义的接口,Any代表任何类型,问号代表可以为null,虽然暂时看不懂,不过这并不影响.
除了arrayOf函数,还有intArrayOf,longArrayOf,doubleArrayOf等等函数
除此之外,Array有自己的构造函数,第一个参数是数组元素个数,第二个参数是一个lambda表达式或者说一个函数或者说一个迭代器(某种意义上可以看作一样东西),在Kotlin中一定程度上实现了统一.
lambda或者说迭代器在Kotlin中使用非常普遍,相信大家已经深有体会 :-) 经常看到默认的那个it(笑)
运行结果不出所料,如下
iterator从0开始哦!
i.plus(i) 等同于i+i,plus就是加法函数.Kotlin就是通过将操作符与函数进行绑定实现了操作符重载的功能(这个以后再看)
除了基本类型,数组类型,还有其他的类之外,Kotlin还有很多有趣的类型(当然他们都是对象),比如Range就是Kotlin中的一种极其有趣的类型,如下:
Range,顾名思义,就是一个范围,这个函数第一句代码定义x为IntRange类型(当然也存在DoubleRange,LongRange等),
根据1.rangeTo(5)我们可以猜测x就代表1到5这样一个范围,那么这样的范围有什么用呢?
很明显可以用在循环中(不是所有的Range都可以用在循环中,要想在循环中使用Range,必须实现iterator)
从for(a:Int in x) print("$a\t")一句我们可以看出,Range实际上可以用来限制循环控制变量的范围
这段代码输出如下
当然对于Kotlin这样追求简洁到极致的语言,使用val x:IntRange = 1.rangeTo(5)实在是太麻烦了,
你可以直接使用var y = 1..5 达到相同的效果,不仅如此,在for循环中a:Int 也可以简化为a
编译器可以自动判断数据类型,其实在前面的代码中所有的数据类型声明都可以省略,就像这样
大多数变量的类型,编译器会自动判断,我之所以把类型写出来是为了让诸位更容易看清楚代码.
如果你仔细发现的话,在Kotlin中还有很多简化代码的方法,尽量少敲键盘是这个语言很大的特点.
另外,这是我们第一次看到控制流(for循环),控制流的东西我打算留到后面,毕竟Kotlin的基本语法特性是在太多了(当然也是考虑到在控制流之前应该先了解操作符,毕竟Kotlin可是支持操作符重载的(笑)).
另外:在Kotlin中Unit类型相当于Java中的void,Unit有时也可以省略.
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:https://my.oschina.net/yuanhonglong/blog/466668


猜你喜欢
- spring-retry模块支持方法和类、接口、枚举级别的重试方式很简单,引入pom包<parent> <gr
- 在前后端分离的项目中后端返回的格式一定要友好,不然会对前端的开发人员带来很多的工作量。那么SpringBoot如何做到统一的后端返回格式呢?
- 1.概述:C语言中的单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。链表中最简单的一种
- 接上篇:播放器-IOS(Swift)篇安卓端原生播放器的接入思路与ios基本一致,所以本篇就不废话了,直接上代码:创建插件VideoView
- 首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载。下面对类库使用的封装方法:得到指定的输入流的ZIP压
- 本文实例为大家分享了android自定义滚动上下回弹scollView的具体代码,供大家参考,具体内容如下这是一个自定义view,在xml布
- 命名空间提供了一种从逻辑上组织类的方式,防止命名冲突。几种常见语言C++命名空间是可以嵌套的嵌套的命名空间是指定义在其他命名空间中的命名空间
- 本文主要介绍了C# WinForm状态栏实时显示当前时间(窗体状态栏StatusStrip示例),分享给大家,具体如下:实现效果:通过Sta
- 相同:1、LinkedBlockingQueue和ArrayBlockingQueue都实现了BlockingQueue接口;2、Linke
- SpringBoot应用启动run方法SpringApplication.java 中执行的代码@SpringBootApplication
- 主要功能共有三个角色:管理员、教师、学生。管理员功能有:学生管理、教师管理、评教管理、指标管理、课程管理等。教师功能有:学生管理、指标管理、
- 一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如
- 1、 题外话 相信大家对LayoutInflate都不陌生,特别在ListView的Adapter的getV
- 有时候如果想让我们的应用在桌面上创建多个快捷方式,我们可以在Manifest.xml文件中对相应的activity进行声明。<appl
- 项目需要去调用.NET的WebSrevice,本身是Java,研究了半天,终于有些头绪,记下来。1,新建.NET WebService。只在
- 引言最近一个朋友正在找工作,他说在笔试题中遇到Equals和==有什么区别的题,当时跟他说如果是值类型的,它们没有区别,如果是引用类型的有区
- 前言大部分来自:https://blog.csdn.net/justloveyou_/article/details/61672133。并在
- 当app中打开了多个activity的时候,由于进入的比较深,所以,很多app不得不让用户一步一步退回到第一个界面(MainActivity
- 一、前言Hello,又见面了,今天分享如何使用Unity制作计算器,难度中等,可以用来学习,或者当成其他项目的小组件导入。当然,也可以导出来
- 概念CAS的全称是Compare-And-Swap,它是cpu并发原语它的功能是判断内存某个位置的值是否为预期值。如果是则更改为新的值,这个