今天看到一面试题,如下:
关于int?p1;以下说法正确的是:
A:p1不可以等于0 B:p1可以代表非int类型
C: p1可以等于null D:p1内存地址会发生变化
可以肯定是A,B错误,C正确,至于D选项,我也不是很清楚。
这里int?代表的是该int类型的变量可以为null.
而一般来说,值类型的变量是不能用=null的。
而如果在类型前面加上?,也就让它可以成空。
恰恰相反,引用类型的变量不能加?来修饰。如下:
总结来说,就是:
值类型变量可以通过加?来使其可以为null,而引用类型则不允许加?。通过这个,可以很轻松判定哪些是值类型,哪些是引用类型。
这是它的第一个作用,第二个作用,就是传参。
void Get(int? num = null)
{
if (num.HasValue )
{
Debug.Log("num = " + num.Value);
System.Console.WriteLine("num = " + num.Value);
}
else
{
Debug.Log("num =Null ");
}
}
类似于引用类型的传参,当你调用某个函数时,某个参数可传可不传,但这个参数又恰恰是值类型时该怎么办呢,就可以用上面的方法。
然后以下两种方式都可以用。
void Start()
{
Get();
Get(3);
}