2016-06-02 3 views
-1

Я думаю, что метод A отобразит «Хорошо», но на самом деле он отображает «Fails». Метод B может получить правильный результат «ОК».Строка, содержащая «/», не может сравниться в андроиде?

Я уверен, что функция fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css") вернет результат «текст/css».

Я не понимаю, почему метод А не может получить правильный результат. Есть ли ошибки с функцией fi.iki.elonen.NanoHTTPD.getMimeTypeForFile?

BTW, метод C может получить правильный результат «ОК».

Метод A Метод

String a="text/css"; 
String b= fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css"); 

Utility.LogError("B: "+b); 

if (a==b){ 
    Utility.LogError("Ok"); 
}else{ 
    Utility.LogError("Fails"); 
} 

Б

String a="text/css"; 
    String b= fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css"); 

    Utility.LogError("B: "+b); 

    if (a.compareTo(b)==0){ 
     Utility.LogError("Ok"); 
    }else{ 
     Utility.LogError("Fails"); 
    } 

Метод C

String a="text/css"; 
    String b= "text/css"; 

    Utility.LogError("B: "+b); 

    if (a==b){ 
     Utility.LogError("Ok"); 
    }else{ 
     Utility.LogError("Fails"); 
    } 

ответ

2

Метод 1

Это приводит к "Сбой" Это потому, что реальные объекты на куче становятся сравниваться, когда вы используете == ссылка: Detailed explanation

Метод 2

Это приводит к ОК, как и б содержат одинаковый текст (тип MIME) в них (по сравнению с использованием)

Метод 3

Это приводит к Ok, как и следовало ожидать.

+0

Спасибо! но на самом деле метод 2 показывает «ОК» – HelloCW

+0

О да, на самом деле я не рассматривал, что ваш метод вернулся .. обновлено – cafebabe1991

1

В способе А, вы судить "A == B" что означает, что a имеет ту же ссылку, что и b.Однако их ссылка различна.

1

Beacause, В случае A, "if (a == b)", a - адрес памяти, так же, b - адрес памяти, конечно же, они не то же самое! , а в случае B вы сравниваете значение & b! поэтому они одинаковы.

0

Чтобы сравнить строки в Java, вы должны использовать equals().

String a = "abc"; 
String b = "abc"; 

if(a.equals(b)) { 
// true! 
} 

Когда вы используете ==, java сравнивает ссылки на объекты, а не их значение.