Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение стрингов 
:(
    Опции темы
kren
Дата 22.10.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.10.2006

Репутация: нет
Всего: нет



В обшем есть метод, возврашяюшия "extention" файла. 

Код

    protected String getExtention(String fileName) {

        int l = fileName.lastIndexOf('.');
        if (l > 0 && l < fileName.length() - 1) {

            String a = fileName.substring(l + 1).toLowerCase();
            fileType = a;
            
            return fileType;
            
        } else {
            
            fileType = "File";
            
            return fileType;
            
        }
    }


Ну и вроде все работает, но когда я пытаюсь сравнить стринги, ничего не выходит.
Код

if (fileType == "mp3") {
 ... //doesn't work
} else if (fileType == "File") {
... //work fine
}


В чем могла бы быть проблема?
PM MAIL   Вверх
powerOn
Дата 22.10.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Строки надо сравнивать через метод equals(). 
== сравнивает ссылки (т.е. адреса строк).


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
kren
Дата 22.10.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.10.2006

Репутация: нет
Всего: нет



Точно, вот  smile , совсем из головы вылетело.
Спасибо.  smile 
PM MAIL   Вверх
Се ля ви
Дата 22.10.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 8
Всего: 127



Цитата(powerOn @  22.10.2006,  13:29 Найти цитируемый пост)
Строки надо сравнивать через метод equals(). 
== сравнивает ссылки (т.е. адреса строк). 

Строго говоря, это утверждение не совсем верно. Всё зависит от того, как создавались эти строки. В данном случае это так, но, скажем, если вы напишете следующее:

Код
String s1 = "гыгыгы";
String s2 = "гыгыгы";

System.out.println(s1 == s2);

Код выведет "truesmile А вот если написать new String ("гыгыгы") - уже будет "false".

Но для надёжности в общем случае, лучше, конечно, использовать equals(), если только производительность не критична или использовать этот трюк не получается...


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Nicholas_S
Дата 22.10.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



 smile ну не ударжался - хорошее название темы  smile 

PS: извините  smile 


--------------------
...все в мире относительно
PM   Вверх
powerOn
Дата 22.10.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(Се ля ви @  22.10.2006,  15:51 Найти цитируемый пост)
Всё зависит от того, как создавались эти строки. В данном случае это так, но, скажем, если вы напишете следующее:


Вот этот пример, как раз и относится к  
Цитата(powerOn @  22.10.2006,  14:29 Найти цитируемый пост)
== сравнивает ссылки (т.е. адреса строк). 


Компилятор оптимизирует инициализации строковых переменных, поскольку эти строки все равно неизменны, выделять лишнюю память нет необходимости. Поэтому и s1 и s2 будут ссылками на одну и тут же строку в памяти.
 



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
JUncle
Дата 22.10.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



Цитата(powerOn @  22.10.2006,  16:36 Найти цитируемый пост)
Компилятор оптимизирует инициализации строковых переменных, поскольку эти строки все равно неизменны, выделять лишнюю память нет необходимости. Поэтому и s1 и s2 будут ссылками на одну и тут же строку в памяти.

Да, верно, и, насколько я знаю, это на совести компилятора.
Для полной уверености:
Код


public String intern()
Returns a canonical representation for the string object. 
A pool of strings, initially empty, is maintained privately by the class String. 

When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned. 

It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true. 

All literal strings and string-valued constant expressions are interned. String literals are defined in §3.10.5 of the Java Language Specification 


Returns:
a string that has the same contents as this string, but is guaranteed to be from a pool of unique strings.

--------------------------------------------------------------------------------


--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
COVD
Дата 22.10.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



можно применить метод compareTo()
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.