示例:
Dim a As Integer = 1
Dim b As Integer = a
Console.WriteLine(b)
a = 0
Console.WriteLine(b)
输出:
1
0
由于某种原因,即使我实际上没有改变b,改变a也会改变b。为什么会发生这种情况,以及如何解决这个问题。
答案 0 :(得分:4)
整数是值类型,因此当您将“a”分配给“b”时,会生成 COPY 。对一个或另一个的进一步更改只会影响其自身变量中的特定副本:
Module Module1
Sub Main()
Dim a As Integer = 1
Dim b As Integer = a
Console.WriteLine("Initial State:")
Console.WriteLine("a = " & a)
Console.WriteLine("b = " & b)
a = 0
Console.WriteLine("After changing 'a':")
Console.WriteLine("a = " & a)
Console.WriteLine("b = " & b)
Console.Write("Press Enter to Quit...")
Console.ReadLine()
End Sub
End Module
如果我们谈论的是参考类型,那么这是一个不同的故事。
例如,Integer可能封装在Class中,而Classes是Reference类型:
Module Module1
Public Class Data
Public I As Integer
End Class
Sub Main()
Dim a As New Data
a.I = 1
Dim b As Data = a
Console.WriteLine("Initial State:")
Console.WriteLine("a.I = " & a.I)
Console.WriteLine("b.I = " & b.I)
a.I = 0
Console.WriteLine("After changing 'a.I':")
Console.WriteLine("a.I = " & a.I)
Console.WriteLine("b.I = " & b.I)
Console.Write("Press Enter to Quit...")
Console.ReadLine()
End Sub
End Module
在第二个示例中,将'a'分配给'b'使'b'成为 REFERENCE 到'a'所指向的Data()的同一个实例。因此,两者都可以看到'a'或'b'中'I'变量的变化,因为它们都指向Data()的相同实例。