我有一个关于字符串连接的简单问题。以下是代码。我想问为什么s6 =“abcde”而不是“akcde”?我已将s2值更改为“k”。
Public Class Form1
Public s1 As String = "a"
Public s2 As String = "b"
Public s3 As String = "c"
Public s4 As String = "d"
Public s5 As String = "e"
Public s6 As String = ""
Public s7 As String = "k"
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
s6 = s1 & s2 & s3 & s4 & s5
s2 = s7
MessageBox.Show(s6) 's6 = abcde
End Sub
End Class
答案 0 :(得分:1)
因为当你将值赋给s6时 - 创建了一个基于s1-s5连接的新字符串 - 之后更改s2对s6中的值没有影响
答案 1 :(得分:1)
当你在s6中存储值时,它会被存储为" abcde" 然后在你改变s2的值之后,所以s6不受影响,因为它不存在于表达式中#s; s2 = s7"
因为编译器只获取s2和s7所以它适用于此 当你改变任何一个变量时,编译器不会检查每个变量.....
答案 2 :(得分:0)
执行此操作时:
s6 = s1 & s2 & s3 & s4 & s5
s6
包含abcde
,这是一个由连接产生的新字符串。
然后您更改变量s2
的值 - 这不会更改s6
。
答案 3 :(得分:0)
当连接2个字符串时,会生成一个新字符串,因为字符串是不可变的。 即使修改字符串,也会生成新字符串。 要证明这一点,试试
s1 = "foo"
s2 = s1
s1 = s1 + "bar" 's2 == 'foo'
经验法则:不要认为将变量作为字符串的引用,而是作为值对象,与int或bool变量完全相同。
答案 4 :(得分:0)
你只是按照错误的顺序进行分配和连接,改为这个;
Public Class Form1
Public s1 As String = "a"
Public s2 As String = "b"
Public s3 As String = "c"
Public s4 As String = "d"
Public s5 As String = "e"
Public s6 As String = ""
Public s7 As String = "k"
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
s2 = s7
s6 = s1 & s2 & s3 & s4 & s5
MessageBox.Show(s6) 's6 = abcde
End Sub
End Class