2015-06-30 2 views
1

Я играл с Classname.class и Classname.class.toString() и обнаружил что-то необычное..class == .class vs .class.toString() vs .class.toString()

. Класс, кажется, приравнивается к классу при работе в одном классе. Хотя .class.toString() не приравнивается к .class.toString() в том же классе. Почему это было бы так.

Пожалуйста, смотрите мой код ниже

public class HelloWorld{ 

    public static void main(String []args){ 
     if(String.class.toString() == String.class.toString()) 
      System.out.println("toString(): Yes they are the same"); 
     else 
      System.out.println("toString(): They are not the same ?"); 

     System.out.println("============================="); 

     if(String.class == String.class) 
      System.out.println(".class: Yes they are the same"); 
     else 
      System.out.println(".class: They are not the same"); 
    } 
} 

Выход:

sh-4.3# javac HelloWorld.java                                
sh-4.3# java -Xmx128M -Xms16M HelloWorld  

toString(): They are not the same ?                              
=============================                                
.class: Yes they are the same 
+0

возможно дубликат [Как сравнить строки в Java ?] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

ответ

4

Потому что вы не использовать == оператора для сравнения строк. Вместо этого используйте метод .equals().

+0

О, боже! Интересно, как я это пропустил! –

2

Почему вы ожидаете, что вызов toString() вернет тот же самый объект, что и второй вызов? Ни Object.toString(), ни Class.toString() не указали в своей документации API Javadoc, что тот же объект String будет возвращен в последовательные вызовы.

Без причины, чтобы сделать иначе, необходимо принять контракт по умолчанию, который необходимо сравнить с String экземплярами с equals().

+0

Да, очень глупо от меня. Благодаря ! –

1

Здесь вы сравниваете ссылки, а не строковое содержимое, а ссылки не равны.

String.class.toString() == String.class.toString() 

Вы должны сравнить с равными:

String.class.toString().equals(String.class.toString()) 

Или можно сравнить с заранее функции строки, например:

String.class.toString().intern() == String.class.toString().intern()