| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Сравнение строк или указателей на строки? |
| Автор: Connie 12.10.2008, 10:18 | ||||
В примерах SUN нашел такой код
http://java.sun.com/docs/books/tutorial/uiswing/examples/components/ProgressBarDemoProject/src/components/ProgressBarDemo.java И хотя выдается предупреждение
Почему же в этом случае оно работает? Или же это предусмотренное отступление от объектной модели данных? Вроде String не примитивный тип? http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html Я знаю, что строки надо сравнивать используя somestring.equals(otherstring) |
| Автор: Connie 12.10.2008, 11:01 | ||
| Platon, то есть константы сравнивать можно именно потому, что компилятор создаст не два экземпляра "progress", а один? Если так, то понятно
|
| Автор: Platon 12.10.2008, 11:37 | ||
Верно. Добавлено через 8 минут и 19 секунд Придется мириться и не плодить больше подобный код. В туториале подобный подход из-за того, что в SwingWorker так нехорошо сделали. |
| Автор: Connie 12.10.2008, 14:48 | ||
Тогда получается в обработчиках событий лучше использовать первый вариант, чем второй, т.к. сравнение указателей должно происходить быстрее, правильно?
Верно? Извините, что по всякой ерунде Вас достаю |
| Автор: Platon 12.10.2008, 16:30 |
абсолютно верно |
| Автор: ivg 12.10.2008, 18:31 | ||
Нет. |
| Автор: Platon 12.10.2008, 19:09 |
ммм, а почему? |
| Автор: Connie 12.10.2008, 20:44 |
| Вот давайте рассуждать вначале создается константа private final static String MY_COMMAND = "start_doing"; Потом у какого то элемента создается SomeUnit.addActionListener(some_where); SomeUnit..setActionCommand(MY_COMMAND); Это будет означать передачу объекту SomeUnit ссылки на MY_COMMAND, которая потом и будет сравниваться на идентичность с сама с собой if (MY_COMMNAD==e.getActionCommand()) Вряд ли в этом экземпляре объекта будет создаваться копия объекта. Хотя вдруг будет? И если я правильно понимаю то, как даются адреса объектам, то неверное совпадение может быть лишь в случае ссылки указывающей на null. Разумеется если я забуду указать final, static то тогда возможны различные коллюзии. Но рассуждая так можно какое угодно ограничение придумать |
| Автор: Platon 12.10.2008, 21:46 | ||
Я полагаю, что может быть по-разному в разных реализациях JVM, хотя, возможно, это закреплено железно в спецификациях. Но в в JVM от Sun не создаются. НО если в официальном туториале они прибегают к подобного рода коду, то это можно считать обычной практикой.
непонятно о чем это. |
| Автор: ivg 12.10.2008, 21:48 | ||
|
| Автор: Platon 16.10.2008, 13:17 |
| Несмотря на то, что GUI с сериализацией сильно не дружат, пожалуй, придется согласиться. |