初识Kotlin之变量
用Java开发了很多年,因为工作的需要学习Kotlin。初识Kotlin时是各种不习惯,觉得这个语言相对于Java而言并不够严谨。随着不断的深入,最终还是逃不过"真香定理"。我一直认为普通的技术使用者是没有太多的权利去评论一门技术语言的好坏。很多人只了解皮毛就开始对它进行过分的评论。所以大家不要被网上的一些信息所左右(像我这样单纯的程序员好像不多了)。如果你有Java基础,上手Kotlin是非常的快,而且还会让你爱不释手。
Hello World
国际惯例,我们分别用Java和Kotlin实现打印hello world的功能。通过比较两者的区别,开启Kotlin大门。
先是熟悉的Java代码:
第一步:创建java文件,并定义一个HelloWorld类,
第二步:创建类的入口函数main方法,在main函数中执行输出语句。
package com.java.helloworld;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
接一下是陌生的Kotlin代码:
第一步:创建kt文件,
第二步:创建入口函数main方法,在main函数中执行输出语句。
package com.kotlin.helloworld
fun main(args: Array<String>) {
println("Hello World")
}
看到这部分代码,你一定会奇怪
Kotlin不需要定义class类就可以执行main方法?是的,当然也可以做到先定义类,然后在类中创建main函数。
Kotlin是通过fun关键字定义一个函数?
Kotlin的main函数为什么没有public static void 等关键字?
Kotlin的变量名怎么在变量类型的前面?
Kotlin的输出语句看起来好简单!!!没错,这些都是Kotlin的语法特点。先混个脸熟!

Kotlin简介
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言。并且Google 已经宣布 Kotlin 成为 Android 官方开发语言。但这并不意味着Kotlin只能做Android开发。Java能做到的,Kotlin基本都可以做到。而且比Java更简单,更简洁,更实用。Kotlin还提供了大量的函数帮助我们快速开发,同时也挖了很多坑等着我们跳。
用Kotlin以后发现自己变笨了点!大家有没有这样的感觉呢?
Kotlin变量
在Java中,声明一个变量,必须要先规定变量的类型,然后才是变量的名称。与之相反,Kotlin是先定义变量名称,最后才是变量类型。Kotlin甚至可以省略变量类型,通过编译器智能推断出变量的类型。这也是变量类型写在后面的好处。
还是老规矩,我们分别用Java和Kotlin变量定义。通过比较两者的区别,进一步了解Kotlin。
列举了一些Java常见的基本数据类型和用法,定义变量的格式:[修饰符] + 变量类型 + 变量名称
public class Variable {
public static void main(String[] args) {
byte b = 0;
short s = 0;
int i = 0;
long l = 0L;
float f = 0.0f;
double d = 0.0;
boolean bl = true;
char c = 'c';
}
}
习惯用Java的朋友在使用Kotlin中最大的不适应的地方就是变量。因为声明变量的代码是常有的,而且两者的语法格式恰恰相反。Kotlin通过关键字val和var定义变量,然后接变量名和变量类型。格式:val/var + 变量名 : 变量类型。
使用关键字val修饰变量表示该变量是不可变的,相当于用Java的final修饰。一旦初始化成功后则不能再重新赋值。Kotlin是默认推荐使用val。开发中经常用val引用变量,对象、集合等。
使用关键字var修饰变量表示该变量时可变的,常用于修饰基本变量,若在实体类中使用val修饰变量,前端传递数据,后端可能会一直获取不到值。就像GO语言,习惯使用Java和Kotlin语言的朋友,在初写Go语言代码时,是否被它的首字母大小写逻辑给雷到呢?
注意:val的不可变指的是本身,它指向的对象可能是可变的。这里有一个小知识,Kotlin中的集合分只读和可读可写两种,是不是又不习惯了!
val map: MutableMap<String, String> = mutableMapOf("Key" to "ITDragon")
map["Key"] = "ITDragonBlog"
println(map) // {Key=ITDragonBlog}
var i = 2
i ++
println(i) // 3
小技巧:初写Kotlin代码,var和val傻傻分不清楚。记住使用val可能出现值不修改的问题,但是都用var修饰变量,一般只会出现逼死强迫症的编译警告。
Kotlin变量声明
Kotlin的变量并非基础数据类型,而是类似Java的包装数据类型。不同的是:Java的包装数据类型的默认值是null。但这里的Kotlin变量都是不允许为null的。因为Kotlin是null 安全的语言。若希望变量值可以为null,则需要在变量类型后面加上?。如Int?,Long?,Float?等等
fun main(args: Array<String>) {
var b: Byte = 0
var s: Short = 0
var i: Int = 0
var l: Long = 0L
var f: Float = 0.0f
var d: Double = 0.0
var bl: Boolean = true
var c: Char = 'c'
}
Kotlin变量取值范围
相信大家都是有一定Java基础的朋友,这里只用输出语句打印变量的取值范围。${}是Kotlin字符串拼接的语法,相比Java,更美观。
fun rangeValue() {
println("Byte (${Byte.MIN_VALUE} ~ ${Byte.MAX_VALUE})")
println("Short (${Short.MIN_VALUE} ~ ${Short.MAX_VALUE})")
println("Int (${Int.MIN_VALUE} ~ ${Int.MAX_VALUE})")
println("Long (${Long.MIN_VALUE} ~ ${Long.MAX_VALUE})")
println("Float (${Float.MIN_VALUE} ~ ${Float.MAX_VALUE})")
println("Double (${Double.MIN_VALUE} ~ ${Double.MAX_VALUE})")
}
Kotlin变量显示转换
Java支持将范围小的变量隐示转换范围大的同类型变量,比如int类型转long类型,char类型转int类型等。但是Kotlin并不支持。比如Int类型变量和Char类型变量直接相加,编译器会报错。Kotlin必须要将Char变量通过执行.toInt()方法显示转换成Int类型。
Kotlin的变量还有一个特点,当声明变量后直接赋值,编译器会智能推断该变量的类型,此时变量类型可以省略。
开始觉得不习惯,后来慢慢就习惯了,这可能大概就是佛系程序员的一个特点吧
fun variableConvert(char: Char) {
var number: Int = 1
println("显示转换成Int类型: ${number + char.toInt()}")
var num = 2
println("智能推断变量类型: ${num.javaClass}")
}
到这里,初始Kotlin的内容就介绍了。Kotlin与Java的区别太多太多了。Kotlin的特点也是非常多。我会拆分成多个小章节。Kotlin好学,但是不好讲。
初识Kotlin之变量的更多相关文章
- 【Kotlin】初识Kotlin(二)
[Kotlin]初识Kotlin(二) 1.Kotlin的流程控制 流程控制是一门语言中最重要的部分之一,从最经典的if...else...,到之后的switch,再到循环控制的for循环和while ...
- 【Kotlin】初识Kotlin之面向对象
[Kotlin]初识Kotlin之面向对象 1.类 在Kotlin中,类用关键字class来定义 如果一个类具有类体,那么需要使用{ }来写类体内容,如果不需要类体,那么只需要定义类名就可以了 // ...
- Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...
- kotlin之变量的可空与非空
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/218 kotlin之变量的可空与非空 上面一篇文章,介绍了 ...
- kotlin之变量与常量
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/217 kotlin之变量与常量 最近开始做新产品,于是乎用 ...
- 初识Kotlin之函数
本章通过介绍Kotlin的基本函数,默认参数函数,参数不定长函数,尾递归函数,高阶函数,Lamdba表达式.来对Kotlin函数做进一步了解.将上一篇的Kotlin变量的知识得以运用.Kotlin变量 ...
- 初识java之变量、数据类型和运算符(一)
博友目标: 1.掌握变量的概念 2.引子----会使用常用数据类型 众所周知,每台电脑都有一个内存这么个必不可少的元素,那么到底内存到底是用来干什么的呢?其实啊,计算机内存相当于人类的大脑,计算机在处 ...
- 循序渐进Python3(六) -- 初识内置变量、反射、递归
#python用下划线作为变量前缀和后缀指定特殊变量.稍后我们会发现, #对于程序来说,其中的有些变量是非常有用的,而其他的则是未知或者无用的. #我们总结一下Python中下划线的特殊用法 ...
- 初识Java(2) 变量与数据类型
一. 变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 1) 必须以字母.下划线 _ .美元符号 $ 开头 2) 变量中,可以包括数字 3) 变量中,不能出现特殊的符号,空格 4 ...
随机推荐
- Django用户继承AbstractUser后密码为明文
Django用户继承AbstractUser后密码为明文 其实本不应该有这个问题,却花了我很久的时间,因为还是初学阶段. 造成这个原因是因为在admin注册的生活没有指定Admin 在app的admi ...
- Android破解学习之路(十五)—— 【Unity3D】洛菲斯的呼唤(Lophis roguelike)无限金币(道具)的实现 破解
前言 之前玩月圆之夜玩的挺high的,最近又找到了个与月圆之夜类似的卡牌游戏,游戏名为Lophis roguelike,中文翻译名洛菲斯的呼唤. 但是这个与月圆之夜有所不同,如果失败了,只能从开头重新 ...
- Scala之eq,equals,==的区别
一.简介 根据官方API的定义: final def ==(arg0: Any): Boolean The expression x == that is equivalent to if (x eq ...
- Redmine入门-安装
Redmine提供了两种方式安装,如果仅仅只是使用Redmine,建议采用一键安装的方式,快捷方便.如果需要做二次开发或者更多的个性化处理,可以采用源码安装方式,下面分别介绍两种安装方式. ----- ...
- express+sequelize 做后台
第一部分:安装express 第一步:执行 npm install -g express-generator note:必须安装这个,不然创建express项目的时候会提示express命令没有找到 ...
- P4015 运输问题 网络流问题
题目描述 WW 公司有 mm 个仓库和 nn 个零售商店.第 ii 个仓库有 a_iai 个单位的货物:第 jj 个零售商店需要 b_jbj 个单位的货物. 货物供需平衡,即\sum\limits ...
- ASP.NET MVC 自定义模型绑定1 - 自动把以英文逗号分隔的 ID 字符串绑定成 List<int>
直接贴代码了: CommaSeparatedModelBinder.cs using System; using System.Collections; using System.Collection ...
- 014_zk路径过滤分析
一.线上zk访问延迟特别高需要统计一段时间内的zk写入路径top10,实现如下: #!/usr/bin/env python # -*- coding:utf-8 -*- import re,trac ...
- 逆向工程核心原理-IA-32寄存器
IA-32由四类寄存器组成:通用寄存器,段寄存器,程序状态与控制寄存器,指令指针寄存器. 通用寄存器:用于传送和暂存数据,也可参与算数逻辑运算,并保存运算结果. EAX(0-31) 32位 ...
- jeecg入门操作—字典配置
一.字典入口 系统 管理->数据字典 二.录入字典 填写字典相关信息 三 .添加字典内容 填写字典某条记录内容 再录入几条 录入之后的字典内容 四.使用字典 1.编辑用户表单,添加用户等级字段 ...