字符串连接:最终字符串值不等于最新值

时间:2012-04-12 10:33:41

标签: .net vb.net string operators string-concatenation

我有一个关于字符串连接的简单问题。以下是代码。我想问为什么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

5 个答案:

答案 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