计算机二级辅导:VB.NET循环体内的局部变量计算机二级考试
文章作者 100test 发表时间 2009:05:28 20:18:45
来源 100Test.Com百考试题网
编辑特别推荐:
全国计算机等级考试(等考)指定教材
全国计算机等级考试学习视频
全国计算机等级考试网上辅导招生
全国计算机等级考试时间及科目预告
百考试题教育全国计算机等级考试在线测试平台
全国计算机等级考试资料下载
全国计算机等级考试论坛
我们知道,在类或者结构初始化的时候, 成员变量最好不要显式赋以0、Nothing、False等初值,这样不但没有必要而且会降低性能。因为成员变量首先会被分配内存空间,并且该内存空间自动用“0”进行初始化,因此显式的赋值会增加指令操作而影响性能。
但如果是局部变量呢?
一般情况下,如果不显式初始化局部变量,局部变量会被自动也赋以空值、0、或者false。
例如以下代码
Dim b As Boolean
Console.WriteLine(b)
Dim rnd1 As Random
If rnd1 Is Nothing Then
Console.WriteLine("yes")
End If
最终会输出:"false yes"
不过对于引用类型的Random,编译器会给出“ 变量“rnd1”在赋值前被使用。可能会在运行时导致 null 引用异常。” 的警告。值类型则没有任何警告。
ok,再来看下这段代码:
1Module Module1Module Module1
2
3 Sub Main()Sub Main()
4 Dim rnd As New Random(1000)
5 For i As Integer = 0 To 4
6 Dim b As Boolean
7 Console.WriteLine(b)
8 If rnd.NextDouble >. 0.5 Then
9 b = True
10 End If
11 Next
12 End Sub
13
14End Module
Module Module1
Sub Main()
Dim rnd As New Random(1)
For i As Integer = 0 To 9
Dim b As Boolean
Console.WriteLine(b)
If rnd.NextDouble <. 0.5 Then
b = True
End If
Next
For i As Integer = 0 To 9
Dim rnd1 As Random
If rnd1 Is Nothing Then
Console.WriteLine("yes")
Else
Console.WriteLine("no")
End If
rnd1 = New Random
Next
End Sub
End Module
照说每次循环都重新定义并初始化该局部变量,期望的输出值应该一直都是false。
但猜猜实际最终输出结果是什么,false,false,false,true,true!!
就是这个怪诞的行为让我困扰了很久。