в книжке рейли вот что есть:
Sub Hain()
Dim s as String
Dim i as integer
s="This is a test
System.Console.WriteLine(s & "|")
s=s.Trim()
System.Console.WriteLine(s & "|")
S="46"
1=4
System. Console. WriteLinefi + System.Convert.Tolnt32(s))
End Sub
End module
"
В процессе исполнения этой небольшой программы з консоль
выводится следующее;
This is a test |
This is a test I
50
Сначала создается и выводится в консоль строка с несколькими
пробелами в конце. Далее вызывается метод Trim, и теперь стро-
ка отображается без пробелов между словом test и вертикальной
чертой. После этого мы присваиваем переменой s значение рав-
ное строке «46». Обратите внимание, что при этом старая строка
(«This is a test») осталась неизменной, вместо этого создана копия.
Строки неизменяемы — после создания их нельзя изменить напря-
мую. Если удобнее напрямую изменить существующую строку, а
не создавать новую копию, рекомендуется использовать класс
StringBuilder."
Что я тут ничего не понимаю! что значит "Обратите внимание, что при этом старая строка
(«This is a test») осталась неизменной, вместо этого создана копия"?
Какая копия? Где создана?
Или речь о том, что в выражении s=s.Trim() s будет указывать на новый объект, а старый объект потеряется и будет собран мусорщиком?
Здравствуйте, Albatross, Вы писали:
A>в книжке рейли вот что есть:
1 Некрасиво приводить неработающий код, написанный в спешке.
2 Вот работающий обработчик события онклик в WinApp
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
txtResult.Text = ""
Dim s As String
Dim s1 As String
Dim i As Integer
s = "This is a test "
txtResult.Text += (s & "|") + Environment.NewLine
s1 = s.Trim()
txtResult.Text += (s1 & "|") + Environment.NewLine
txtResult.Text += (s & "|") + Environment.NewLine 's not changed
s = "46"
i = 4
txtResult.Text += (i + System.Convert.ToInt32(s)).ToString()
End Sub
Судя по всему имелось ввиду что:
s.Trim() не меняет строку s, а лишь возвращает измененную версию ее.
Это явно видно в строке с коментариями.
Здравствуйте, Albatross, Вы писали:
<skipped>
Почитай Рихтера. Там подробно рассказана работа со строками.
Любое изменение класса String приводит, фактически к вызову конструктора, который создает новую строку.
Отличие StringBuilder'а в том, что он на самом деле работает со string внутренними методами и местами использует unsafe-операторы. Если интересно как все это работает — глянь рефлектором.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
stroka eto object u nee posledovatelnost simvolov opredelennoi dlini opredeliaemoi vo vremia construirovania.Dobavit simvol tuda ne mozez.sam po sebe + eto operator visivaemii dlia stroki.On sozdaet novuiu stroku dlinoi pervoi stroki plus vtoroi ,no opertator = vidvo v s kopiruet vse no dlina stroki strogo opredelena.kstati ti mog izmenit sto-to i po sosednemu adresu priv
Sub Hain()
Dim s as String
Dim i as integer
s="This is a test"
System.Console.WriteLine(s & "|")
s="trim trim trim trim"
System.Console.WriteLine(s & "|")
S="46"
1=4
System. Console. WriteLinefi + System.Convert.Tolnt32(s))
End Sub
End module
posmotri sto vivodit