2012-04-12 56 views
0

我有一個關於字符串連接的簡單問題。以下是代碼。我想問問爲什麼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

你是串聯字符串是ABCDE,而不是akcde s6 = s1&s2&s3&s4&s5 – 2012-04-12 10:38:13

回答

1

,因爲當你將價值S6 - 基於S1的串聯一個新的字符串 - S5創建 - 當你做這個改變S2之後在S6

0

的價值沒有影響:

s6 = s1 & s2 & s3 & s4 & s5 

s6包含abcde,起因於串聯一個新的字符串。

然後,您更改變量的值s2 - 這不會更改s6

+0

@Dow nvoter - 謹慎評論? – Oded 2012-04-12 12:17:12

0

當連接2個字符串時,會生成一個新的字符串,因爲字符串是不可變的。 即使修改字符串,也會生成新字符串。 爲了證明這一點,只是嘗試

s1 = "foo" 
s2 = s1 
s1 = s1 + "bar" 's2 == 'foo' 

憑經驗:不認爲字符串變量作爲參考字符串,但作爲價值對象,正是因爲int或布爾變量。

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 
1

當您存儲值在S6中它被存儲爲「ABCDE」 ,然後在此之後你改變s2的值,所以S6不受影響,因爲它不存在於表述「S2 = S7」

,因爲編譯器只獲得S2和S7所以它的工作原理上 編譯器不言,當你改變任何一個變量來檢查每個變量.....