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

【Kotlin】空安全 ① ( Kotlin 的空安全机制 | 变量可空性 | 默认变量不可赋空值 | 声明可空类型变量 )

文章目录 一、Kotlin 的空安全机制 二、变量可空性 1、默认变量不可赋空值 2、声明可空类型变量 一、Kotlin 的空安全机制 ---- Java 中的空指针问题 : 在 Java 语言...Kotlin 程序的 代码健壮性 ; 二、变量可空性 ---- 1、默认变量不可赋空值 在 Java 中 , 引用类型的变量 默认为 null 空值 ; 但是在 Kotlin 中 , 变量默认不可为...null 空值 , 这样所有的 变量 在默认状态下 , 都有一个 默认的实例对象 , 从而极大的 减少了 空指针异常 出现的概率 ; 代码示例 : 先定义一个 name 变量 , 为其赋值字符串 "Tom...赋值一个空值 , 除非 将该变量声明为 可空类型 ; 2、声明可空类型变量 声明可空类型变量 : 如果要声明一个 可空类型的变量 , 必须 声明该变量的具体的类型 , 并在该类型后添加 ?...可空类型 , 此时就可以为 该变量 赋值 null 值 ; fun main() { var name: String?

1.9K20

Kotlin中的可空类型

Kotlin为了解决这个问题,引进了可空类型,将运行时可能发生异常提前到编译期发现。 Kotlin中有可空类型,这种类型表示取值可能为空;而一般类型,则取值不能为空。区别是类型后面有一个?...,表示这个类型是可空的。 举个栗子: var s?...=null var s="Hello World" var s=null //编译器提示错误,因为s1是不可空的类型 为了应对可空的判断,Kotlin提供了几种操作符。...length } 因为你自己确保了这个可空类型不为空,那么如果为空,那不好意思了,你就会碰到空指针异常了,Exception in thread "main" kotlin.KotlinNullPointerException...所以说,Kotlin中虽然有了可空类型,但也不是就没有空指针异常哦。

1.5K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 匹配可空变量

    在 C# 7.0 的时候提供更好用的模式匹配方法,支持通过 is 直接转换对应的类,但是如果是尝试转换可空的对象,那么将会提示无法编译,或转换失败 在 C# 7.0 的 is 转换是十分好用的功能,例如我写了一个...是非法的;请改用基础类型bool 也就是模式匹配里面对于空的判断是认为小伙伴不能这样写 这个用法和 as 有一些不同 var b = null as bool?...; 上面代码可以计算出一个为空的 bool?...但是在模式匹配里面是不进入判断 也就是在模式匹配里面其实不包含可空 这个问题有Blue小伙伴在 github 上的roslyn #20156 提出,他的问题翻译出来大概是这样 在进行可空的模式匹配的时候...如果o是bool 的时候的值: 如果不是的时候的值 所以提示的无法编译就是找不到定义的变量和表达式为 false 的变量 那么现在尝试做一道题 class B { public

    68320

    C# 匹配可空变量

    在 C# 7.0 的时候提供更好用的模式匹配方法,支持通过 is 直接转换对应的类,但是如果是尝试转换可空的对象,那么将会提示无法编译,或转换失败 在 C# 7.0 的 is 转换是十分好用的功能,例如我写了一个...是非法的;请改用基础类型bool 也就是模式匹配里面对于空的判断是认为小伙伴不能这样写 这个用法和 as 有一些不同 var b = null as bool?...; 上面代码可以计算出一个为空的 bool?...但是在模式匹配里面是不进入判断 也就是在模式匹配里面其实不包含可空 这个问题有Blue小伙伴在 github 上的roslyn #20156 提出,他的问题翻译出来大概是这样 在进行可空的模式匹配的时候...如果o是bool 的时候的值: 如果不是的时候的值 所以提示的无法编译就是找不到定义的变量和表达式为 false 的变量 那么现在尝试做一道题 class B { public

    52110

    第3章 Kotlin 可空类型与类型系统第3章 Kotlin 可空类型与类型系统

    第3章 Kotlin 可空类型与类型系统 跟Java、C和C ++ 一样, Kotlin也是“静态类型编程语言”。...Kotlin系统类型分为可空类型和不可空类型。Kotlin中引入了可空类型,把有可能为null的值单独用可空类型来表示。这样就在可空引用与不可空引用之间划分出来一条明确的显式的“界线”。...Kotlin类型层次结构如下图所示: ? Kotlin类型层次结构 通过这样显式地使用可空类型,并在编译期作类型检查,大大降低了出现空指针异常的概率。...3.4.1 Unit类型 Kotlin也是面向表达式的语言。在Kotlin中所有控制流语句都是表达式(除了变量赋值、异常等)。 Kotlin中的Unit类型实现了与Java中的void一样的功能。...如果是一个可空的Unit?,它的父类型是Any?。 ? Unit类型结构 3.4.2 Nothing与Nothing?类型 在Java中,void不能是变量的类型。也不能被当做值打印输出。

    2.1K20

    【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)

    变量定义只有四种情况 : ① 非空变量 / 可空变量 直接赋值非空初始值 ; ② 可空变量使用 ?...Kotlin 变量分类 : Kotlin 中的变量分为两种 , 非空变量 和 可空变量 , 其中非空变量是困扰广大 Java 开发者的一大难题 , 因为 Java 中没有非空变量这个概念 , Kotlin...等操作 , Java 中的所有变量都是可空的 ; 2 . Kotlin 变量的默认状态 : Kotlin 中变量默认是非空变量 , 默认状态下 , Kotlin 必须进行初始化 ; 3 ....非空变量 使用时 不能赋值 null : ① 变量赋值 null 情况 : 如果为 Kotlin 的非空变量 , 也就是默认状态下的变量 , 赋值 null , 编译器直接报错 ; ② 报错信息如下...Kotlin 可空变量 ---- Kotlin 中的可空变量 , 与 Java 变量性质相同 , 所有的 Java 变量都是可空变量 ; 1 .

    2.7K20

    Kotlin 变量详解:声明、赋值与最佳实践指南

    Kotlin 变量变量是用于存储数据值的容器。...要创建一个变量,使用 var 或 val,然后使用等号(=)给它赋值:语法var 变量名 = 值val 变量名 = 值示例var name = "John"val birthyear = 1975println...变量类型与许多其他编程语言不同,Kotlin 中的变量不需要声明指定的类型(比如对于文本是 "String",对于数字是 "Int",如果你熟悉的话)。...要在 Kotlin 中创建一个应该存储文本的变量和另一个应该存储数字的变量,请看下面的示例:示例var name = "John" // String(文本)val birthyear = 1975...Kotlin 变量的一般规则是:名称可以包含字母、数字、下划线和美元符号名称应该以字母开头名称也可以以 $ 和 _ 开头(但我们在本教程中不会使用)名称区分大小写("myVar" 和 "myvar" 是不同的变量

    19710

    Java 8中的Optional 类型与 Kotlin 中的可空类型Java 8中的Optional 类型与 Kotlin 中的可空类型Kotlin 中的可空类型《Kotlin极简教程》正式上架:

    Java 8中的Optional 类型与 Kotlin 中的可空类型 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型。...Kotlin 中的可空类型 上面 Java 8的例子,用 Kotlin 来写就显得更加简单优雅了: package com.easy.kotlin fun main(args: Array<String...还有Java 8 Optional 提供的orElse s.orElse("").length(); 这个东东,在 Kotlin 是最最常见不过的 Elvis 运算符了: s?.length ?...Kotlin 中的明星符号 ?????????????????????????????????????? ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?...示例源代码工程Github 地址: https://github.com/EasyKotlin/java_optional_vs_kotlin_nullable_type 非常感谢您亲爱的读者,大家请多支持

    2.6K10

    变量赋值

    从代码风格的角度将,换行可提升代码的可读性。 ? Tcl中的命令是由一个或多个单词构成,单词之间以空格或TAB键隔开,且第一个单词为命令名,其余单词为该命令的参数。如下图所示。...该命令由3个单词构成,其中命令名为set,该命令包含两个参数,第1个参数为变量名,第2个参数为变量值。 ? 若给命令set提供额外的参数,则会报错,如下图所示。 ?...Tcl中的变量名并不遵循C语言中变量名的命名规则,如下图所示。可以看到,变量名以下划线作为开头是可以接受的。这也反应了Tcl的特征“一切都是字符串”。 ? Tcl对命令的求值过程分为两步:解析和执行。...unset命令与set命令相反,该命令将取消变量定义并释放该变量所占的内存空间,但取消未定义的变量是不合法的。如下图所示。 ?

    2.5K50

    【Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )

    文章目录 一、Kotlin 的空安全机制 二、变量可空性 1、默认变量不可赋空值 2、声明可空类型变量 三、手动空安全管理 四、空安全调用操作符 ?...默认为非空的 , 在 Kotlin 中 不允许将 默认变量 赋值一个空值 , 除非 将该变量声明为 可空类型 ; 2、声明可空类型变量 声明可空类型变量 : 如果要声明一个 可空类型的变量 , 必须...可空类型 , 此时就可以为 该变量 赋值 null 值 ; fun main() { var name: String?...---- Kotlin 中的 可空类型 变量 , 在运行时 可以选择 不启用 安全调用 操作 , 在调用 可空类型 变量 成员 与 方法 时 , 使用 非空断言操作符 !!...可空类型的变量 , 为其赋值为 null , 使用 name ?

    1.8K10

    【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )

    文章目录 一、Kotlin 变量可空性 1、Java 与 Kotlin 空值处理区别 2、Java 函数返回非空值和控制 3、Kotlin 函数调用 Java 函数 4、平台类型 5、@NotNull...3、使用 @JvmName 注解修改 Kotlin 生成的 Java 类名 一、Kotlin 变量可空性 ---- 1、Java 与 Kotlin 空值处理区别 在 Java 语言 中 , 任何 引用类型变量...都可以为 空 null ; Java 中 八种 基本数据类型 变量 的 默认值 为 0 或 false ; 但是在 Kotlin 语言 中 , 所有的 变量 都是引用类型变量 , 没有基本数据类型 ,...中 , 凡是 调用 Java 代码 获取的 变量 , 不知道 这个变量 是否为空 , 这种变量的类型 就称为 " 平台类型 " ; 所有的 平台类型 变量 都是 可空的 , Kotlin 会将其自动推断为...可空类型 ; 调用 平台类型 变量 的成员时 , 都必须使用 " ?.

    1.6K20

    dotnet C# 警惕可空结构体的方法内部赋值无效

    本文将记录一个 C# dotnet 里的一个稍微隐藏的行为,那就是如果有一个结构体存在某个的方法,此方法的作用是修改结构里面的字段或属性的值,那此时将会在可空的结构体调用此方法时,发现没有真正修改到可空结构体局部变量本身...为什么可空会有此影响呢?...Value”的返回值,因为它不是变量 这是因为 foo.Value.Number = 100; 这句话里面隐式包含了从 foo 可空类型里面取出 Value 的代码。...可空类型的 Value 内容的隐藏的变量,如果此时写 foo.Value.SetNumber(100) 则是对隐藏的变量调用 SetNumber 方法,自然修改的是这个隐藏的变量,而不是 foo 可空类型本身的结构体的值...foo = new Foo(); foo = foo.Value.SetNumber(100); 由于是直接修改 foo 可空类型局部变量本身,自然就可以完成进行赋值 本文代码放在 github

    12200

    makefile变量赋值

    大家好,又见面了,我是全栈君 在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。...先看第一种方式,也就是简单的使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧变量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,其也可以使用后面定义的值。...可见,变量是可以使用后面的变量来定义的。...,只能使用前面已定义好了的变量。...因为在操作符的右边是很难描述一个空格的,这里采用的技术很管用,先用一个 Empty变量来标明变量的值开始了,而后面采用“#”注释符来表示变量定义的终止,这样,我们可以定义出其值是一个空格的变量。

    1.4K20

    使用下标给string类型赋值之后,cout输出变量为空的问题。

    今天写创建文件夹的时候,怎么创建都不会,反复修改,确定错误是出在了string类型的变量上面。...无则创建 但是我发现根本创建不了文件夹 我试着输出循环中的fileurl_s_cy[i],能够正常输出我想要的字符 但是当我输出fileurl_s_cy的时候出了问题,fileurl_s_cy至始至终为空,...长度也为空,导致无法正常创建文件夹 明明可以正常输出fileurl_s_cy[i],但是无法正常输出fileurl_s_cy,本以为是’\0’的问题,发现加上也无济于事,fileurl_s_cy整体长度依旧是...0 我可以使用std::stringfileurl_s_cy = “www/ccccc” 这种形式正常创建文件夹,但就是无法使用下标的赋值方式 经过一番百度,得知是因为声明fileurl_s_cy的时候没有开辟空间...解决方法如下: 声明的时候改为std::string fileurl_s_cy(len,’\0’); 这样就可以正常使用下标赋值,输出以及整体输出 怕忘记,记录与此。

    5K40
    领券