首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin-基本数据类型与运算符

Kotlin 中的常见的数据类型有:整型、浮点型、Boolean、字符、数组与字符串。 基本类型 整型 Byte:8 位整型。 Short:16 位整型。 Int:32 位整型(默认)。...Double val oneDouble: Double = 1.0 // Double val oneFloat: Float = 3.1415926f // Float,带一个f Boolean true:。...val condition = true val condition = false 类型推断 Kotlin 是一种类型安全的语言,编译代码时执行类型检查,并将任何不匹配的类型标记为错误,让我们尽早捕获并修复错误...Kotlin 中的区间:..,0..10表示 0 ~ 10。 逻辑运算符 操作数的类型必须是Boolean。 &&(与运算):表示多个条件必须同时成立。...||(或运算):表示多个条件有一个成立即可。 !(取反运算):表示对条件取反。

32930

不要用Java的语法思维来写Kotlin

因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的 if 就能胜任这个角色。...如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件时则执行该分支: when { x.isOdd() -> print("x is odd") x.isEven(...智能转换的适用条件或规则: val局部变量-总是适用! val属性-适用于private或internal,或者类型检查is/!...函数的返回值可以是null 8.真的要习惯Koltin的for循环,太强大了 Kotlin没有Java中的for(初始值;条件;增减步长)这个规则。...for循环提供迭代器用来遍历任何东西 for循环数组编译为一个基于索引的循环,它不会创建一个迭代器对象 新增的规则,去满足for(初始值;条件;增减步长)这个规则 递增 关键字:until 范围:until

3K40
您找到你想要的搜索结果了吗?
是的
没有找到

写了多年的Java,直到看到Kotlin,原来代码可以如此优雅!

因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的 if 就能胜任这个角色。...如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件时则执行该分支: when { x.isOdd() -> print("x is odd") x.isEven(...智能转换的适用条件或规则: val局部变量-总是适用! val属性-适用于private或internal,或者类型检查is/!...函数的返回值可以是null 8.真的要习惯Koltin的for循环,太强大了 Kotlin没有Java中的for(初始值;条件;增减步长)这个规则。...for循环提供迭代器用来遍历任何东西 for循环数组编译为一个基于索引的循环,它不会创建一个迭代器对象 新增的规则,去满足for(初始值;条件;增减步长)这个规则 递增 关键字:until 范围

3.3K40

使用Kotlin Native技术开发iOS应用

文件的具体含义如下: Projects:主要用于存放Mac软件开发的可执行文件等,iOS应用开发很少用到这个文件; Frameworks:主要用于存放项目依赖的一些系统库和第三方库; Project:此目录用于存放与项目相关的源码...此时,只需要点击【Run】按钮即可在iPhone模拟器或者机中启动应用程序。...不过,此时的程序还没有实现任何的功能,为了在项目中使用Kotlin来编写iOS应用程序,可以在Kotlin Native项目的Project文件中创建一个Kotlin的文件目录(如src/main/kotlin...@ObjCAction fun click(){ label.text="Hello,${textFiled.text}" } } 由于开发者自己定义的文件目录未被标记为源根目录...,是不会被编译系统识别的,所以需要将“src/main/kotlin”目录标记为项目源码目录才能够系统识别。

1.9K30

一文带你弄懂 JVM 三色标记算法!

与漏问题 多问题指的是原本应该回收的对象,多余地标记为黑色存活对象,从而导致该垃圾对象没有回收。...多问题会导致内存产生浮动垃圾,但好在其可以再下次 GC 的时候回收,因此问题还不算很严重。 漏问题指的是原本应该被标记为存活的对象,遗漏标记为黑色,从而导致该垃圾对象错误回收。...我们经过分析可以知道,漏问题要发生需要满足如下两个充要条件: 有至少一个黑色对象在自己标记之后指向了这个白色对象 所有的灰色对象在自己引用扫描完成之前删除了对白色对象的引用 只有当上面两个条件都满足...CMS 解决方案 CMS 回收器采用的是增量更新方案,即破坏第一个条件:「有至少一个黑色对象在自己标记之后指向了这个白色对象」。 既然有黑色对象在自己标记后,又重新指向了白色对象。...为什么要有三色标记算法?

1.5K30

Kotlin实战【四】迭代事物:while和for

1、while循环 kotlin的while和do-while与Java语法一致,这里简单看一下 while (condition) { //当条件时,代码体执行 /*...*/ }...do {//无条件的执行一次,之后当条件时执行 /*...*/ } while (condition) 2、for循环 for循环仅以一种形式存在,和java的for-each循环一致 Java...when实现FizzBuzz: 规则:用fizz单词替代任何可以三整除的数字,用buzz单词替代任何可以五整除的数字。...如果你有任何支持比较实例的类(实现了java.lang.Comparable),就可以对这个类的实例进行比较。 如: println("Kotlin" in "Java".."...in同样适用于集合 println(“Kotlin” in setOf(“Java”, “Scala”,“hello”)) //这个集没有“Kotlin”字符串 //false kotlin不包含在集合里面

1.1K20

这次是拯救了我,MySQL索引优化,explain讲得非常清楚了

这次是拯救了我,MySQL索引优化,explain讲得非常清楚了 primary 如果 SQL 语句中包含任何子查询,那么子查询的最外层会被标记为 primary ?...这次是拯救了我,MySQL索引优化,explain讲得非常清楚了 subquery 在 select 或者 where 里包含了子查询,那么子查询就会被标记为 subQquery,同三.二同时出现 ?...这次是拯救了我,MySQL索引优化,explain讲得非常清楚了 derived 在 from 中包含的子查询,会被标记为衍生查询,会把查询结果放到一个临时表中 ?...会被标记为 union,union 的结果记为 union result。...这次是拯救了我,MySQL索引优化,explain讲得非常清楚了 ref 不是主键索引,也不是唯一索引,就是普通的索引,可能会返回多个符合条件的行。 ?

70420

Kotlin 泛型详解

引子 Kotlin 100% 与 Java 兼容,所以抛开语言表面上面的种种特质之外,背后的语言逻辑或者说“灵魂”与 Java 总是想通的。...最近一段时间在网上发了一套 Kotlin 的入门视频,涵盖了基础语法、面向对象、高阶函数、DSL、协程等比较有特色的知识点,不过有朋友提出了疑问:这门课为什么不专门讲讲泛型、反射和注解呢?...super E 的用法,这表示元素类型为 E 及其父类,这个通常也叫作逆变。 2.2 Kotlin 的型变 型变包括协变、逆变、不变三种。 下面我们看看 Kotlin 是怎么支持这个特性的。......     } } 为什么会报错呢?...这也很容易解释为什么 MutableCollection 是不变的,而 Collection 是协变的,因为在 Kotlin 当中,前者是可被修改的,后者是不可被修改的。

1.2K20

为什么 Python、Go 和 Rust 都不支持三元运算符?

本文将主要分析 Python 在设计条件选择语法时的过程,科普为什么它会采用现今的与众不同的实现方案,同时,我们也将考察为什么其它语言也要抛弃传统的三元运算符。...概括起来,分歧的问题主要有:是否用标点符号、是否复用关键字、是否复用圆括号、是否引入新关键字、是否引入新语法…… 由于得票太分散,因此,这个 PEP 在当时拒绝了。...and-or 用于条件选择的问题 以上的投票事件发生在 2004 年 3 月,但是,在 PEP 拒绝后,相关话题的讨论并未平息,因为大家总想找一种简洁的方式来替换“if-else“。...因此,PEP-308 重开和更新,并很快就在次年的 2.5 版本中实现了。 前文已提到过这个让一些人感觉不舒服的方案了,因为它没有将条件判断逻辑放在最前面。 那么,为什么最后的胜者会是它呢?...Kotlin 有“?:”运算符,注意两个符号是连在一起的,val result = a ?

4.2K10

数据挖掘系列(6)决策树分类算法

过程: 记D中满足j的记录集合为Dj; 如果Dj为空: 否则: 则新建一个叶子结点F,标记为D中类最多的类,并且把结点F挂在N下; 递归调用GenerateDecisionTree(Dj,attributeList...)得到子树结点Nj,将Nj挂在N下; 从属性列表中减去分裂属性,attributeLsit -= splitAttribute; 则将节点N作为叶子结点标记为D中类最多的类,并返回结点N; 则将节点N...作为叶子节点标记为C,并返回结点N; 构造一个节点N; 如果数据记录D中的所有记录的类都相同(记为C类): 如果属性列表为空: 调用AttributeSelectionMethod(D,attributeList...三、属性选择方法   属性选择方法总是选择最好的属性最为分裂属性,即让每个分支的记录的类别尽可能纯。它将所有属性列表的属性进行按某个标准排序,从而选出最好的属性。...D1为D的一个非空子集,D2为D1在D的补集,即D1+D2=D,对于属性R来说,有多个子集,即GiniR(D)有多个值,但我们选取最小的那么值作为R的基尼指数。最后: ?

1.5K40

三色标记算法

2、漏:是指那些本该存活的对象,在一次GC回收过程中却被当做垃圾对象回收了 产生漏需要两个必要条件,缺一不可: 1、黑色对象 -> 白色对象建立链接 2、灰色对象 -> 白色对象引用断开产生漏标的过程...,正在标记 C第二步:业务线程:A -> D 新建了引用关系,同时 B -> D 的引用失效第三步:GC 线程:因为A已经扫描完成,所以未感知到 A -> D 的建立引用,认为没有任何引用指向D,D漏回收漏影响...,重新扫描白色对象是否引用,1、GMS 避免漏标的方法叫做增量更新:1、GC线程: A 已经完全标记,B 已经完成自身标记,正在标记C2、业务线程:A -> D 新建了引用关系,利用写屏障将A重新标记为灰色...(注意:这里的写屏障,并不是指内存屏障,是指类似切面编程的理念,不改变原有逻辑的情况下,将A标记为灰色)3、GC线程: A 变为灰色,需要重新标记  2、G1 避免漏标的方法叫做...为什么G1会选择SATB来解决漏问题呢,我们知道:当灰色对象-> 白色对象引用消失时,该引用原始快照会被记录下来,下次扫描时会拿到该引用,检查白色对象是否有引用指向它,这是时候配合RSet,无需遍历整个堆

13900

灵活运用inline和crossinline来优化代码

Kotlin中,如果一个函数记为inline,那么在编译时,编译器将会将函数体的代码直接嵌入到调用它的地方。这样可以减少函数调用的开销,从而提高程序的性能。...在Kotlin中,如果一个函数参数记为crossinline,那么这个函数参数不能在函数体中使用return语句进行非局部返回。...由于这个lambda表达式记为crossinline,因此它不能在函数体中使用return语句进行非局部返回。...记为crossinline的函数参数不能在函数体中使用return语句进行非局部返回。 记为crossinline的函数参数不能记为noinline。...由于这个lambda表达式记为crossinline,因此它不能在函数体中使用return语句进行非局部返回。

18720

Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言

那么在 2017、2019 两届的 Google I/O 以后,这个说法可以站住脚了。 Kotlin 比 Java 强?...“ Kotlin 与 Java 总是在主观比较 “Kotlin 比 Java 好”,“Kotlin 可读性比 Java 强”,“Kotlin 开发速度比 Java 快”,类似这样的陈述缺少相关准确数据的支持...超过四分之一的受调者迁移到 Kotlin 后又回到了 Java。有技术方面的原因,也有组织方面的原因。其中使用了反射或代码生成的工具是提及最多的因素。 “Kotlin 的枚举不能包含常量。...但同样可以看到,Android 社区拥抱 Kotlin 的速度越来越快,也许有一天,在 Android 世界里,我们会看到 Kotlin 对 Java 的超越。 为什么谷歌会支持 Kotlin?...此后,Kotlin开发者视为 Java 的替代品。 在之后的一年时间里,Google 可以说把 Kotlin 当亲儿子看待,为什么这么说呢?

1.2K20

G1垃圾收集器详解(3)之CSet

白色是未标记;灰色自身标记,引用的对象未标记;黑色自身与引用对象都已标记。 ? 2.4.5 漏问题 在remark过程中,黑色指向了白色,如果不对黑色重新扫描,则会漏。...此时白色对象应该被回收 产生漏问题的条件有两个: 1.黑色对象指向了白色对象 2.灰色对象指向白色对象的引用消失 所以要解决漏问题,打破两个条件之一即可: 1.跟踪黑指向白的增加 incremental...update:增量更新,关注引用的增加,把黑色重新标记为灰色,下次重新扫描属性。...2.记录灰指向白的消失 SATB snapshot at the beginning:关注引用的删除,当灰–>白消失时,要把这个 引用 推到GC的堆栈,保证白还能GC扫描到。G1采用该方法。...为什么G1采用SATB而不用incremental update? 因为采用incremental update把黑色重新标记为灰色后,之前扫描过的还要再扫描一遍,效率太低。

2.7K10

如何评估机器学习模型的性能

这个详细的讨论回顾了您必须考虑的各种性能指标,并对它们的含义和工作方式提供了直观的解释。 为什么需要评估? 让我从一个非常简单的例子开始。 罗宾和山姆都开始为工科大学准备入学考试。...进行训练测试拆分后,您获得了长度为100的测试集,其中70个数据点标记为正(1),而30个数据点标记为负(0)。现在,让我为您的测试预测绘制矩阵: ?...注意: 在“ 肯定”,“否定”,“假肯定”和“假否定”表示法中,请注意,第二项(“正”或“负”)表示您的预测,而第一项则表示您预测的是对还是错。...即使我们预测有任何健康的患者诊断出,也仍然可以,因为他可以进行进一步检查。 准确性 准确度是其字面意思,表示模型的准确度。...假设某些x_1的p_1为0.95,某些x_2的p_2为0.55,并且符合1类条件的截止概率为0.5。然后两者都符合类别1的条件,但是p_2的对数损失将比p_1的对数损失大得多。 ?

1.1K20

编写你的第一个 Android 单元测试

QA 同学总是谈重构而色变,我们在重构遗留代码的时候也是提心吊胆,生怕改错了旧的逻辑,或者意外影响到别的模块。...一个好的单元测试的一个重要特性就是运行速度要快,通常是毫秒级的,而依赖 Android 框架的代码都需要在模拟器上或者机上运行(也不是绝对的),速度不可避免的会慢很多,所以我们在做 Android 单元测试的时候会避免让测试代码对...在这个条件下,一般适合进行单元测试的代码就是:   MVP 结构中的 Presenter 或者 MVVM 结构中的 ViewModel   Helper 或者 Utils 工具类   公共基础模块,比如网络库...mock() 方法   这个方法是 mockito-kotlin 库提供的,它是一个包装类库,背后又调用了 Mockito 类库,这个库可以用来伪造一些稳定的依赖类,避免不稳定的依赖造成我们的单元测试结果不可预期...这里验证的时候使用了 JUnit 库中的 assertThat() 方法,这个方法接收两个参数 ,第一个参数是验证的目标,第二个参数是一个 Matcher,因为 kotlin 中 is 是保留关键字,所以需要用

1.7K20

JVM 三色标记法

针对这一问题我们通过 “三色标记 (Tri-Color-Marking)” 作为理论工具来辅助推导,将垃圾收集器遍历对象引用的过程中,“按照是否访问过” 这个条件标记成三种颜色。...灰色:表示已经垃圾收集器访问过,但是这个对象至少存在一个引用还没有扫描过。 白色:表示对象尚未被垃圾收集器访问过。...当我们做并发标记的时候,垃圾收集器访问过 A、B、C、D 最终都标记为黑色。但是这个时候程序执行了一个 a.b.d = null 就标识 D 其实是没有引用,理论上 D 对象可以回收。...下面我们会通过并发标记的过程中出现的漏和多场景进行分析。 漏 在并发标记过程中,将原本消亡的对象标记为存活对象,这就是漏。就会产生浮动垃圾,需要等到下次 GC 的时候清理。...多 在并发标记过程中,将原本存活的对象标记为需要回收的对象。

52410

JVM:并发的可达性分析

想解决或者降低用户线程的停顿,就要先搞清楚为什么必须在一个能保障一致性的快照上才能进行对象图的遍历?...灰色:表示对象已经垃圾收集器访问过,但这个对象上至少存在一个引用还没有扫描过。---关于可达性分析的扫描过程,可以发挥一下想象力,把它看作对象图上一股以灰色为波峰的波纹从黑向白推进的过程。...一种是把原本消亡的对象错误标记为存活(即原本应该是白色的对象为黑色),这不是好事,但其实这种情况是可以容忍的,只不过产生了一点逃过本次收集的浮动垃圾而已,下次收集清理掉就好。...另一种是把原本存活的对象错误标记为已消亡(即原本应该是黑色的对象为白色),这就是非常致命的后果了,程序肯定会因此发生错误,下图演示了这样的致命错误具体是如何产生的。...图片Wilson 于 1994 年在理论上证明了,当且仅当以下两个条件同时满足时,会产生 “对象消失” 的问题,即原本应该是黑色的对象为白色:赋值器插入了一条或多条从黑色对象到白色对象的新引用;赋值器删除了全部从灰色对象到该白色对象的直接或间接引用

36330
领券