首页
学习
活动
专区
工具
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
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Vue3+TypeScript】CRM系统项目搭建之 — 关于拥抱 TypeScript 这件事【上】

    —— 隐式的any let b //以下对b的赋值,均⽆警告 b = 100 b = '你好' b = false 注意点: any 类型的变量,可以赋值给任意类型的变量 /* 注意点:any类型的变量...let a:object //a的值可以是任何【⾮原始值类型】,包括:对象、函数、数组等 // 以下代码,是将【⾮原始类型】赋给a,所以均⽆警告 a = {} a = {name:'张三'} a = [...1,3,5,7,9] a = function(){} // 以下代码,是将【原始类型】赋给a,有警告 a = null // 警告:不能将类型“null”分配给类型“object” a = undefined...let a:Object //a的值必须是Object的实例对象, // 以下代码,均⽆警告,因为给a赋的值,都是Object的实例对象 a = {} a = {name:'张三'} a = [1,3,5,7,9...{ name: string; }”的参数不能赋给类型“Demo”的参数 test('123') test({name:'张三',length:10}

    13010

    c#值类型与引用类型区别

    由于不能将值类型作为基类型来定义新的值类型或者新的引用类型,所以不应在值类型中引用任何新的虚方法。所以方法都不能是抽象的,所以方法都隐式密封(不可重写)。....由于不能将值类型作为基类型来定义新的值类型或者新的引用类型,所以不应在值类型中引用任何新的虚方法。所以方法都不能是抽象的,所以方法都隐式密封(不可重写)。.引用类型的变量包含堆中对象的地址。...引用类型的变量创建时默认初始化为null,表明当前不指向有效对象。试图使用null引用类型变量会抛出NullReferenceException异常。...CLR确实允许为值类型添加“可空”(nullability)标志。 将值类型变量赋给另一个值类型变量,会执行逐字段的复制。将引用类型的变量赋给另一个引用类型的变量只复制内存地址。...相反,值类型变量自成一体,对值类型变量执行的操作不可能影响另一个值类型变量 由于未装箱的值类型不在堆中分配,一旦定义了该类型的一个实例的方法不再活动,为它们分配的存储就会被释放,而不是等着进行垃圾回收。

    80320

    Java一分钟之变量声明与初始化基础

    本文将带你快速深入理解这一基础概念,揭示其中的常见问题、易错点以及如何巧妙避免,通过实例代码让你轻松上手。 变量声明与初始化概述 变量是程序中用于存储数据的容器。...默认初始化:若未显式初始化,Java会根据变量类型赋予默认值,如int为0,boolean为false等。 局部变量:必须显式初始化才能使用,否则编译错误。...常见问题与易错点 问题1:类型不匹配 尝试将一个类型的值赋给另一个不兼容类型的变量,如: int num = 3.14; // 错误:不能将double类型赋给int 问题2:未初始化 忘记初始化变量,...尤其是成员变量,可能引起逻辑错误或默认值导致的意外行为。...= 0; // 局部变量 balance -= amount; // 改变的是局部变量 } } 如何避免 明确类型:在声明变量时,确保类型与赋值的数据类型一致,必要时进行类型转换

    15710

    C#基础03

    重点:如何把字符串转换成枚举类型 程序代码实现: (自定义的枚举类型)(Enum.Parse(typeof(自定义的枚举类型),“待转换的字符串”)); 结构体 可以存储一组类型不同的信息(甚至包括方法...如果,参数是以out 形式传入的,那么在传入前可以不赋初值。但是在方法内对形参必须赋初值。 一定意义上,可以理解成在方法内部定义的变量赋初值不是在定义时赋值而是在调用的方法内部赋初值。...在方法中必须对out修饰的值必须赋值(这也导致了out一般只能用于传出值而不能传入值,因为参数没有赋初值,必须在方法内部赋初值而不能将参数的值赋给其他变量,这也是与ref 的区别所在)。...ref(引用传递,直接对内存地址进行操作) 可以理解既可以传入(传入参数时需要对参数赋初值,因此在方法内部可以将参数的值赋给其他变量,实现传入值的功能),也可以传出(改变参数的值后会方法外面的值也会改变与...改变值可以改变方法外的值 //这里与out 的区别就在于可以将参数的值赋给其他变量 int b = num; int c = nums

    14810

    同时搞定Android和iOS的Dart语言(1):Dart初探

    Dart语言允许指定数据类型,也可以不指定数据类型,如果在定义一个变量时未指定数据类型,Dart编译器会根据右侧初始化变量的值自动推断变量的数据类型。...例如,一个变量在初始化时是字符串类型,在运行时,可以将一个整数赋给该变量,那么这时这个变量的数据类型就是int类型了。这种强类型编程语言中是绝对不允许的。...var number = 20; number = "hello world"; // 会抛出异常,不能将字符串类型的值赋给int类型的变量 其实现在比较流行静态语言动态化,也就是为静态语言添加动态语言的特征...null, s4是dynamic数据类型,因为在定义变量时未初始化 s1 = 20; // 抛出异常,因为不能将整数赋给一个字符串变量 } Swift语言 var s1 = "hello...= 20 //抛出异常,不能将整数赋给一个字符串变量 Go语言 s1 := "hello world" // 定义s1变量,并自动识别s1为字符串类型 var s2

    1.7K30

    使用默认不可变的Rust变量会踩什么坑

    声明、初始化和绑定变量的语句可用于变量赋值的一般表达式与控制流表达式变量的数据类型可以接受变量作为参数并能将返回值赋给变量的函数与变量一样都可以存储值的常量变量名不副实这一点足以让程序员踩坑,而与变量相关的那些概念也暗藏着不少陷阱...1..3 将创建一个不包含上界的范围,即 1 和 2。1..=3 中的 = 符号表示这是一个包含上界的范围。{这个大括号标志着循环体的开始。循环体中的代码将对范围中的每个值执行一次。...如何修复这个问题?代码清单3-1所对应的完整源代码展示了两种方法。一种是在第3行变量sum前,添加mut关键字,使其成为可变变量,这样把第5行的注释取消,编译就不再报错。...赋值操作不会改变变量的类型。赋值可以发生在变量生存期内的任何时候。如下所示。let mut x = 5;x = 10; // 赋新值❗️变量赋值避坑指南只有可变变量才能被赋值。...这行被注释掉的代码试图用赋值,修改不可变结构体实例point的x坐标,如果取消注释,将导致编译错误。如何修复这个问题?代码清单3-2所对应的完整源代码,给出了两种修复方法。

    33473

    C语言的数据的强制类型转换

    将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换实际上是强制的。  ...(3) char型与int型  ● int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。 ...● chr型数值赋给int型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。...对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同  (4) int型与long型  ● long型数据赋给...● 将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储形式不变,但外部表示时总是无符号的。

    1.2K20

    同时搞定Android和iOS的Dart语言(3):数值类型

    一旦变量的数据类型确定为int,那么就不能将一个浮点数或其他类型的值赋给这个变量,例如,下面的代码会抛出编译错误。...int x = 20; //x = 12.4; // 抛出编译错误,无法将一个浮点数赋给一个int类型的变量 但可以将一个整数赋给一个double类型的变量,例如,下面的代码是正确的。...也就是说,如果将一个变量声明为num类型,那么该变量既可以赋int类型的值,也可以赋double类型的值,代码如下: num k = 20; k = 40.12;...void main() { // x的值是int类型能表示的最大整数值 int x = 9223372036854775807; print('x = $x'); // 输出x的位长度...var oneString = 1.toString(); // 将浮点数3.1415926转换为String类型的值 var piString = 3.1415926.toString(

    1.3K20

    C++学习——虚函数与纯虚函数

    虚函数,这样,将不同的派生类对象的地址赋给基类的指针变量后, 就可以动态地根据这种赋值语句调用不同类中的函数。...2、把函数名赋值为0,本质上是将指向函数体的指针值赋为初值0。与定义空函数不一样,空函数的函数体为空,即调用该函数时,不执行任何动作。没有在派生类重新定义这种虚函数之前,是不能调用这种纯虚函数的。...2、与指向类中数据成员的指针变量同类型的任一数据成员,可将其地址赋给这种指针变量,赋值 的一般格式为: PointName = &ClassName::member; 这种赋值,是取该成员相对于该类的所在对象中的偏移量...,即相对地址(距离开始位置的字节数) 如:mptr = &S::y; 表示将数据成员y的相对起始地址赋给指针变量mptr。...2、不能将任一成员函数的地址赋给指向成员函数的指针变量,只有成员函数的参 数个数、参数类型、参数的顺序和函数的类型均与这种指针变量相同时,才能将成 员函数的指针赋给这种变量。

    3.3K20

    【编程基础】C语言指针的初始化和赋值

    所以后面所示的做法是不行的: int *p = 0x12345678 ; 正确的方式应为:int *p = (int *) 0x12345678; 要注意指针中只能存放地址,不能将一个非0值整型常量表达式或者其他非地址类型的数据赋给一个指针...:一个具有0值的整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋给任何类型的指针。...也就是说,我们可以将0、0L、'/0'、2–2、0*5以及(void *)0赋给一个任何类型的指针,此后这个指针就成为一个空指针,由系统保证空指针不指向任何对象或函数。...,如:int i = 3; int *ip = &i; 3.将一个指针常量赋给一个指针,如:long *p = (long *)0xfffffff0; 4.将一个T类型数组的名字赋给一个相同类型的指针...C语言中的malloc函数的返回值就是一个void *型指针,我们可以把它直接赋给一个其他类型的指针,但从安全的编程风格角度以及兼容性上讲,最好还是将返回的指针强制转换为所需的类型,另外,malloc在无法满足请求时会通过返回一个空指针来作为

    3.3K80

    C语言指针的初始化和赋值

    所以后面所示的做法是不行的: int *p = 0x12345678 ; 正确的方式应为:int *p = (int *) 0x12345678; 要注意指针中只能存放地址,不能将一个非0值整型常量表达式或者其他非地址类型的数据赋给一个指针...:一个具有0值的整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋给任何类型的指针。...也就是说,我们可以将0、0L、’/0’、2–2、0*5以及(void *)0赋给一个任何类型的指针,此后这个指针就成为一个空指针,由系统保证空指针不指向任何对象或函数。...,如:int i = 3; int *ip = &i; 3.将一个指针常量赋给一个指针,如:long *p = (long *)0xfffffff0; 4.将一个T类型数组的名字赋给一个相同类型的指针...C语言中的malloc函数的返回值就是一个void *型指针,我们可以把它直接赋给一个其他类型的指针,但从安全的编程风格角度以及兼容性上讲,最好还是将返回的指针强制转换为所需的类型,另外,malloc在无法满足请求时会通过返回一个空指针来作为

    2.6K10

    Swift 基础之常量和变量

    这个例子给 welcomeMessage 变量添加了类型标注,表示这个变量可以存储 String 类型的值: var welcomeMessage: String 声明中的冒号代表着“是...类型”,所以这行代码可以被理解为...如果你在声明常量或者变量的时候赋了一个初始 值,Swift 可以推断出这个常量或者变量的类型。...在上面的例子中,没有给 welcomeMessage 赋初始值,所以变量 welcomeMessage 的类型是通过一 个类型标注指定的,而不是通过初始值推断的。...一旦你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者改变其存储的值的类型。同时,你也不能将常量与变量进行互转。...无论如何,你应当避免使用关键字作 为常量或变量名,除非你别无选择。 你可以更改现有的变量值为其他同类型的值,在下面的例子中,friendlyWelcome 的值从 "Hello!"

    47720

    SpringSecurity认证流程分析

    认证流程分析 AuthenticationManager AuthenticationManager是认证管理器 它定义了Spring Security过滤器要如何执行认证操作。...在认证后会返回一个Authentication对象,它是一个接口,默认实现类是ProviderManager AuthenticationProvider AuthenticationProvider针对不同的身份类型执行具体的身份认证...定义异常,认证结果等变量 getProviders方法获取当前ProviderManager所代理的所有AuthenticationProvide对象,遍历这些AuthenticationProvider...对象,同时调用copyDetails方法给Authentication对象的details属性赋值。...在for循环执行完成后,如果result还是没有值,说明所有的AuthenticationProvider都认证失败,此时如果parent不为空,则调用parent的authenticate方法进行认证

    65610

    Java Script脚本语言入门(上)

    要创建一个全局变量,则必须使用一个var关键字进行声明变量。 在声明变量时不需要指定变量的类型,变量的类型将使用变量的值来确定。...5.运算符的应用 1.赋值运算符 运算符 描述 = 将右边表达式的值赋给左边的变量 += 将运算符左边的变量加上右边表达式的值赋给左边的变量 -= 将运算符左边的变量减去右边表达式的值赋给左边的变量 *...= 将运算符左边的变量乘以右边表达式的值赋给左边的变量 /= 将运算符左边的变量除以右边表达式的值赋给左边的变量 %= 将运算符左边的变量用右边表达式求模,并将结果值赋给左边的变量 &= 将运算符左边的变量与右边表达式进行逻辑与运算...,并将结果赋给左边的变量 |= 将运算符左边的变量与右边表达式进行逻辑或运算,并将结果赋给左边的变量 ^= 将运算符左边的变量与右边表达式进行逻辑异或运算,并将结果赋给左边的变量 2.算术运算符 运算符...只根据表面值进行判断,不涉及数据类型 === 绝对等于。根据表面值与数据类型同时进行判断 != 不等于。之根据表面值进行判断,不涉及数据类型 !== 不绝对等于。

    1.6K20

    Swift 基础之类型

    由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把 不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。...当你要处理不同类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明 常量和变量的时候都需要显式指定类型。...原理很简单,只要检查你赋的值即可。 因为有类型推测,和 C 或者 Objective-C 比起来 Swift 很少需要声明类型。常量和变量 虽然需要明确类型,但是大部分工作并不需要你自己来完成。...当你声明常量或者变量并赋初值的时候类型推测非常有用。当你在声明常量或者变量的时 候赋给它们一个字面量(literalvalue 或 literal)即可触发类型推测。...例如,如果你给一个新常量赋值 42 并且没有标明类型,Swift 可以推测出常量类型是 Int,因为你给它赋的初始值看起来像一个整数: let meaningOfLife = 42 // meaningOfLife

    35210

    为什么说js是动态类型语言呢?

    x = true; // 这里x的类型变为boolean 在 JavaScript 中,变量的类型可以根据赋值的值自动推断,并且可以在运行时改变变量的类型。...这些示例展示了 JavaScript 的动态类型特性,变量可以根据赋值动态改变类型,对象的属性可以在运行时动态添加或修改,函数的参数可以接受不同类型的值。...= "Hello"; // 变量可以被赋予一个字符串类型的值 console.log(variable); // 输出: Hello variable = true; // 变量可以被赋予一个布尔类型的值...variable = "Hello"; // 错误:不能将字符串类型赋给数字类型的变量 let greeting: string = "Hello"; console.log(greeting); /.../ 输出: Hello greeting = true; // 错误:不能将布尔类型赋给字符串类型的变量 在这些示例中,你可以看到 TypeScript 代码中的变量需要在声明时指定类型,并且在编译过程中会对类型错误进行检查

    43310
    领券