"int?" 是什么类型?和"int"有何区别

int?:表示可空类型,就是一种特殊的值类型,它的值可以为null用于给变量设初值得时候,给变量(int类型)赋值为null,而不是0int??:用于判断并赋值,先判断当前变量是否为null,如果是就可以赋役个新值,否则跳过public int? a=null;public int b(){return this.a ?? 0;}

值类型后面加问号表示可为空null(Nullable 结构)

Nullable是.NET 2.0中新提供的一种用于标明一个值类型是否可以为空的技术。

对于一个类型,如果既可以给它分配一个值,也可以给它分配空引用null(表示没有任何值),我们就说这个类型是可空的。

因此,可空类型可表示一个值,或表示不存在任何值。例如,类似 String 的引用类型就是可空类型,而类似 Int32 的值类型不是可空类型。Nullable 结构支持将值类型扩展为可以为null,但不支持在引用类型上使用,因为引用类型本身就是可空的。

因为值类型的容量只够表示适合于该类型的值,因此它不可为空;值类型没有表示空值所需的额外容量。

例:public int? age;

补充:其它的类型后加问题也是同样的道理。int? num = null;   正确int num=null;     错误---------------------------------------------------------------------------------------------------------------------------微软MSDN是提示如下例子:http://msdn.microsoft.com/zh-cn/support/1t3y8s4s(VS.80).aspxclass NullableExample{     static void Main()     {         int? num = null;         if (num.HasValue == true)         {             System.Console.WriteLine("num = " + num.Value);         }         else         {             System.Console.WriteLine("num = Null");         }

         //y is set to zero         int y = num.GetValueOrDefault();

         // num.Value throws an InvalidOperationException if num.HasValue is false         try         {             y = num.Value;         }         catch (System.InvalidOperationException e)         {             System.Console.WriteLine(e.Message);         }     }}

以上将显示输出:

num = Null

Nullable object must have a value.

可空类型概述可空类型具有以下特性:

可空类型表示可被赋值为 null 值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。

语法 T? 是 System.Nullable<T> 的简写,此处的 T 为值类型。这两种形式可以互换。

为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108;。

如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 属性返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault();

请使用 HasValue 和 Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value;

如果此变量包含值,则 HasValue 属性返回 True;或者,如果此变量的值为空,则返回 False。

如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException。

可空类型变量的默认值将 HasValue 设置为 false。未定义 Value。

使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; int y = x ?? -1;。

不允许使用嵌套的可空类型。将不编译下面一行:Nullable<Nullable<int>> n;
时间: 2024-08-04 14:47:24

"int?" 是什么类型?和"int"有何区别的相关文章

java中Object转换成int或String类型方法

转载: http://www.cnblogs.com/1020182600HENG/p/6137206.html Object obj = getObject(); if(obj instanceof Integer) int value = (Integer)obj; 1 String转换为int类型的方法: 1. Integer.parseInt([String]) 2.Integer.valueOf([String]).intValue(); 3.Integer.decode([Strin

Java8 将String[]数组、Integer[]等包装类数组转化成int[]等基本类型数组

把一个包装类型数组String[].Integer[]等转化成int[]等基本类型数组,是在太不想用for循环就用Java8的stream吧 public class ToStreamIntString{ public static void main(String[] args) { Scanner in = new Scanner(System.in); List<String> list = new ArrayList<>(); for (int i = 0; i <

mysql 表主键类型由int 改为bigint

需求:由于业务的需要,tmp_employees的emp_no主键字段类型为int已经不能满足业务的需求,此时需要将该表主键字段类型由int 更改为 bigint 使用工具:pt-online-schema-change ./pt-online-schema-change  --user=root --password=root456 --recursion-method="processlist" --alter="modify column emp_no bigint n

数组冒泡排序,文件读取,数据库读取,string类型的int数组转换成int数组

排序方式(枚举) 1 public enum SortBy 2 { 3 Asc, 4 Desc 5 } 数组冒泡排序方法 1 public class SortEntity 2 { 3 public static int[] SortArray(int[] array,SortBy sortby) 4 { 5 int flag; 6 switch (sortby) 7 { 8 case SortBy.Asc: 9 for (int i = 0; i < array.Length - 1; i++

sqlserver中将varchar类型转换为int型再进行排序的方法

sql中把varchar类型转换为int型然后进行排序,如果我们数据库的ID设置为varchar型的 在查询的时候order by id的话 如果我们数据库的ID设置为varchar型的 在查询的时候order by id的话我们是不希望看到如下情况的. 我们可以把varchar转换为int 然后进行排序 一. 复制代码代码如下: select * from yourtable order by cast(yourcol as int); 适用于SQLServer Oracle 二. 复制代码代

34 char类型转换为int类型

#include<iostream> #include<cstdlib > using namespace std; int main() { char a=101; int sum=200; a+=27;sum+=a; printf("%d", a); cout<<sum<<endl; } 分析:char类型的范围是-128---+127,当a+=27,之后a的值超出可表示范围会变为-128. a为char型,-128~127,a=10

C++里的int 和string类型相互转换

C++不像Java和C#一样在进行数据类型转换时直接调用一些类方法就可以了,使用起来很简单. 一个很简单的例子就是string str="D:\\"+1+".txt";这在Java或者C#里面是可以自动拆箱和包 箱就可以了,但是在C++里面是不可以的.当然这只有一个文件还好,但是当我们要使用for循环去遍 厉一个文件夹下的1,2,3...命名的文件时或许就有点麻烦了.由于我自己碰到过这种情况,所以这里写 写几种方法.或许不是最好的方法,但是权当练练笔了,如果你发现错

MySQL整数类型说明 int(11) vs int(20)

整数类型后面跟的是显示的宽度.M指示最大显示宽度.最大有效显示宽度是255.显示宽度与存储大小或类型包含的值的范围无关. 实践出真知: mysql> create table test2 ( a int , b int(20) unsigned not null , c int(40) unsigned zerofill ) engine = innodb ; Query OK, 0 rows affected (0.06 sec)   mysql> show create table tes

C语言中,double、long、unsigned、int、char类型数据所占字节数

C语言中,double.long.unsigned.int.char类型数据所占字节数和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异.但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)<=sizeof(int) 2 sizeof(int)<=sizeof(long int) 3 short int至少应为16位(2字节) 4 long int至少应为32位. unsigned 是无符号的意思. 16位编

int位数的获取及int类型转char *

C语言获取int位数: int intlen(int num){/*参数:要获取长度的int类型数据返回值:返回长度*/ int tmpn=num; int len=1; while(tmpn/=10) len++; return len;} C语言int类型转char *类型: void intostr(char *dest,int num,int intlen){/*参数: dest---将int转换为char *后的存储位置 num---要转换的int类型值 intlen---int类型长