Память под строки
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Память под строки Expand / Collapse
Автор
Сообщение
05.09.2006 6:06


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.10.2007 19:44
Сообщ.: 477, Visits: 4 198
Все собираюсь спросить:
Если я в Си инициализирую строку, а потом захочу ее изменить в сторону увеличения, то должен использовать функцию strcat для этого, т.к. физически под нее отведено определенное место в памяти и не дай бог выйти за его пределы.
Если я делаю в Ява:
String str="12345";
и потом
str="1234567890";
компилятор ошибки не дает, но корректно ли это и зачем метод concat у типа String ?

И заодно второе - чем все-таки правильно пользоваться для сравнения строк - equals или compareTo ?


------------------------------
Мое почтение к уважаемому собранию!
Сообщ. #903831
05.09.2006 8:50
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 12.12.2006 17:30
Сообщ.: 45, Visits: 83
модифицировать строки java нельзя.

если нужна модифицируемая строка используй класс StringBuffer.

1. String str = "123";

2. str = "123456"

str это указатель на объект, в первом случае он указывает на "123", во втором на "123456", почему здесь должна быть ошибка, вторым оператором ты меняешь значение указателя, а не содержимое строки

функция concat создаст новую строку и вернет ее, она не модифициует текущую..

2. имхо equals

Сообщ. #903832
05.09.2006 12:32
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 10.11.2008 0:08
Сообщ.: 1 298, Visits: 12 501
danii все сказал

1. это корректно, ошибки нет
2. http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#concat(java.lang.String)
3. используй equals (оба метода работают правильно, но возвращают разные результаты)

Удачи,
Владимир
Сообщ. #903861
05.09.2006 13:32


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.10.2007 19:44
Сообщ.: 477, Visits: 4 198
Сэнкс
и еще
String str="12345';
String str=new String("12345");
есть ли разница и чем пользоваться в случае конкретно со строками?

str=str+"12345" - тоже новая строка будет?


------------------------------
Мое почтение к уважаемому собранию!
Сообщ. #903864
05.09.2006 15:30
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 12.12.2006 17:30
Сообщ.: 45, Visits: 83
String str = "123"; - объект создается на стадии компиляции

String str = new String("123"); - объект создается во время выполнения кода

str = str + "123" - это тоже новый объект

Сообщ. #903870
05.09.2006 15:46
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 12.12.2006 17:30
Сообщ.: 45, Visits: 83
Выражусь покорректнее

String str = "123", str2="123", str3="123"; - оптимизируется на стадии компиляции, и в итоге str, str2, str3 указывают на один и тот же объект;

String str=new String("123"), str2 = new String("123") .. - здесь же str  и str2 указывают на разные объекты

решай сам важное ли это различие..

Сообщ. #903871
05.09.2006 16:40
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
danii, чувак, экзамен что ли сдал? Зачтено по всем пунктам =)) Давай зачетку.
Сообщ. #903874
05.09.2006 17:04
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.02.2008 19:48
Сообщ.: 480, Visits: 5 178
И заодно второе - чем все-таки правильно пользоваться для сравнения строк - equals или compareTo ?

equals вроде начинает с того, что убеждается что совпадает класс, а потом сверяет посимвольно. А compare вроде сразу посимвольно и показывает, в какую сторону отличие (>, = или <), что может быть полезно. Где-то видел изнурительную дисскуссию на тему, что быстрее. В зависимости от ситуации.  

Сообщ. #903877
05.09.2006 17:33