kotlin 之于 java 的差异

2023-11-20

一.变量声名,赋值和访问

kotlin 变量是空安全的,一般要求声明时就赋值。声名变量有两个关键字varval,其中val相当于 java 的中的final。变量类型可显式给出,也可隐式推断。变量也可分可空类型和非空类型。以下给出几种声名和初始化示例说明

var a:String="hello"   //显式声明String 类型变量
private var b="hello"  //隐式声明,可推断为String类型变量
var c:String?=null     //可空的 String 类型变量,可空类型必需显式给出类型
lateinit var d:String  //String 类型变量,可延迟但必须在使用前要赋值,仅变量支持。

internal val e="hello"           //常量
val f:String by lazy { "hello" } //懒加载属性,首次使用才会初始化。

可空变量访问需要强制判断空,见下面示例:

var name:String?=null;
val len1=name!!.length   //如果name 为空就会报NPE
val len2=name?.length?:0 //为空时返回0,"?."只有不空时才执行后面语句否则返回null.

在kotlin中变量都会自动有隐式的有get和set属性,访问可见性同声明变量的访问属性,这在 java 中是要对变量额外写一堆 get 和 set 方法。 kotlin 的属性的 get 和 set 的访问可见性和属性访问也都是重写的见下面示例:

 var name:String="won't null" //name 的访问级别为public
    get() {
  return field}      //属性的访问器需要有内置field 去引用
    private set(value) {      //set操作访问重写为private级别   
        if(value.isNotEmpty()){
            field=value       //改写设置器只接受非空字符
        }
    }

在 java 中有个 volatile 修饰变量来解决多线程访问变量一致性问题,这种作用的关键字在 kotlin 中是没有的,不过它提供了注解的方式达到相同的功能即:@Volatile 来注解修饰某个变量。kotlin 的每个变量在编译生成 class 字节码中都会有相应的get和set方法,仅val的变量是没有 set 方法的(常量 set 无意义).如果我们想强制让变量像 java一样,而不会编译生成访问器可用 @JvmField 来注解变量。

二.控制语句和运算符

kotlin有的表达式和java差不多,但它没有 java 的逗号表达式和switch 表达式,不过有很好的代替方案:java 的逗号表达式在kotlin中可用Elvis操作符可 if-else代之,而 switch 表达式可用新加的 when 表达式代替。见下例使用

var score=8
val grade=when(score){
    9,10 ->"Excellent"
    7,8  -> "Good"
    6    -> "ok"
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kotlin 之于 java 的差异 的相关文章

随机推荐

  • python中类的函数的调用

    这里要考虑的重要事项是您正在使用的变量和 或函数名称的范围 全局范围意味着 一切都可以看到它 无论是在顶层 在函数内部 还是在一个类中的方法内部 本地范围意味着它已锁定在该块的上下文中 并且块外的任何内容都无法看到它 在 您的情况下 该块是
  • 使用JavaScript 将Json数据导出CSV文件

    原理 CSV文件格式单元格之间是通过 隔开的 CSV文件格式里 换行是通过 n实现的 从上面两条结论 我们只有把相应的数据转换成 和 n就可以了 但其实真正的答案应该是把相应的数据转换成 和 r n 为什么会这样 且让我一一道来 我们在编辑
  • C++&QT-模仿string类

    目录 1 mystring h 2 mystring cpp 3 mian cpp 4 运行结果 1 mystring h ifndef MYSTRING H define MYSTRING H include
  • VS2017+WDK10驱动编译与调试

    驱动编译 安装VS2017 和WDK 10 下载地址 https docs microsoft com zh cn windows hardware drivers download the wdk 如果安装VS2017时没有选择安装win
  • 三面美团被问:MySQL的B+Tree索引到底是咋回事?聚簇索引到底是如何长高的?这不是必过?

    你肯定知道MySQL进行CRUD是在内存中进行的 也就是在Buffer Pool中 然后你也知道了当内存中没有MySQL需要的数据时 MySQL会从Disk中通过IO操作将数据读入内存中 读取的单位呢就是 数据页 一般数据页长下面这样 没错
  • 17.清晰架构(01): 融合 DDD、洋葱架构、整洁架构、CQRS...(译)

    17 清晰架构 01 融合 DDD 洋葱架构 整洁架构 CQRS 译 原文 https herbertograca com 2017 11 16 explicit architecture 01 ddd hexagonal onion cl
  • 作物产量常用的单位换算公式

    作物产量常用的单位换算公式 一 产量的定义 Agronomic Yields 1 Abstrct 2 Protocol 2 1 Grain Harvest of Annual Row crops 标准含水量 For corn the sta
  • Python人工智能,13天快速入门机器学习教程,含14大案例(NBA球员数据分析,北京租房数据,疾病数据预测等)

    40h小时入门人工智能 带你了解人工智能的前世今生 带你掌握人工智能经典算法 可掌握核心能力 1 掌握机器学习中处理数据的方法 2 理解经典的机器学习算法原理 3 掌握机器学习中工作的具体流程 Python人工智能13天快速入门机器学习教程
  • Android studio Mac快捷键连续选择相同内容和选中当前光标位置内容

    刚从Windows换到Mac第一件事绝对是先熟悉AS的快捷键 有两个很好用的快捷键找了很久都没找到 这里放出来 连续选择相同内容 Windows Alt j Control G Mac接Windows键盘是 Ctrl G 效果如下 选中当前
  • 面试之MySQL调优问题

    文章目录 前言 一 MySQL的底层原理粗解 1 1 MySQL的底层运作 1 2 MySQL的存储方式 二 索引 重点内容 2 1 索引是什么 2 2 MySQL调优到底是调啥的 2 3 如何创建一个索引 2 3 1在创建表的时候创建索引
  • Linux 上传删除文件命令

    rm 文件名 删除 rz Enter 上传文件 Ctrl z 退出
  • 枚举基础问题

    枚举问题 与7无关的数为例 枚举问题 这类问题并不复杂 对于题目本身只需要通过循环去遍历 列举出所有可能满足条件的情况 一个一个罗列出来 称为枚举问题 例如下面的题目 与7无关的数 这就是一类枚举问题 将所有可能满足 与7无关的数 罗列出来
  • POC - Adobe ColdFusion 反序列化漏洞(CVE-2017-3066)

    安装010Editer 下载链接 http www pc6 com softview SoftView 55129 html 复制POC的十六进制 00 03 00 00 00 01 00 00 00 00 00 00 00 01 11 0
  • html制作简单的表单<form>

    文章目录 一 使用到的标签用法介绍 1 演示标签代码 2 标签使用具体介绍 二 表单制作代码 三 结果显示 一 使用到的标签用法介绍 1 演示标签代码
  • 输出九九乘法表

    九九乘法表 尝试编写程序 输出九九乘法表 具体如下图所示 代码 include
  • redis服务器信息统计,Redis 返回关于 Redis 服务器的各种信息和统计数值 命令:INFO...

    INFO section 以一种易于解释 parse 且易于阅读的格式 返回关于 Redis 服务器的各种信息和统计数值 通过给定可选的参数 section 可以让命令只返回某一部分的信息 server 一般 Redis 服务器信息 包含以
  • 突发!ITELLYOU要改版了!

    微信公众号 网管小贾 个人博客 www sysadm cc 经常下载Windows系统镜像的老司机中 我敢保证十之八九对 MSDN 我告诉你 这个网站再熟悉不过 可是对于新手小白们来说 这个站TA究竟是个啥 其实 MSDN 我告诉你 是个名
  • 解决火狐首次启动太慢的方法

    众所周知 火狐浏览器有一定的优越性 现在众多的网站都采用了jquery技术 而ie在加载jquery上效果实在太差 尤其是配置稍低的情况下 ie很容易被卡死 这就体现出了火狐的优势 但火狐唯一不足的就是第一次启动的速度非常的慢 下面就是解决
  • 世界芯中国芯RISC-V相关资源及进展

    目录 1 RISC V介绍 RISC V为何会在最近两年迅速崛起 RISC V处理器生态 RISC V商业模式 2 RISC V发展历程 3 RISC V国际协会 4 中国RISC V产业联盟 5 RISC V相关资源 1 指令集规范 2
  • kotlin 之于 java 的差异

    一 变量声名 赋值和访问 kotlin 变量是空安全的 一般要求声明时就赋值 声名变量有两个关键字var和val 其中val相当于 java 的中的final 变量类型可显式给出 也可隐式推断 变量也可分可空类型和非空类型 以下给出几种声名