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
4

5 に答える 5

1

s6 に値を格納すると、「abcde」として格納され、その後に s2 の値を変更するため、式「s2=s7」に存在しないため、s6 は影響を受けません。

コンパイラはs2とs7のみを取得するため、1つの変数を変更したときにコンパイラがすべての変数をチェックするように作られているわけではありません.....

于 2012-04-12T11:26:07.793 に答える
1

値を s6 に割り当てると、s1 の連結に基づく新しい文字列 - s5 が作成されるため、後で s2 を変更しても s6 の値には影響しません。

于 2012-04-12T10:36:12.160 に答える
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
于 2012-04-12T10:40:40.263 に答える
0

これを行う場合:

s6 = s1 & s2 & s3 & s4 & s5

s6abcde連結の結果として得られた新しい文字列が含まれています。

次に、変数の値を変更しますが、s2これは変更されませんs6

于 2012-04-12T10:38:24.513 に答える
0

文字列は不変であるため、2 つの文字列が連結されると、新しい文字列が生成されます。文字列を変更しても、新しい文字列が生成されます。それを証明するには、試してみてください

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

経験則: 文字列変数を文字列への参照としてではなく、値オブジェクトとして、正確に int または bool 変数として考えてください。

于 2012-04-12T10:38:39.047 に答える