# Java В чем разница между каноническим именем, простым именем и именем класса?

**URL:** <https://forum.itvdn.com/t/java-v-chem-raznicza-mezhdu-kanonicheskim-imenem-prostym-imenem-i-imenem-klassa/3248>\
**Category:** Java\
**Created:** [21.02.2019 15:44:07 UTC](https://forum.itvdn.com/t/java-v-chem-raznicza-mezhdu-kanonicheskim-imenem-prostym-imenem-i-imenem-klassa/3248 "2019-02-21T15:44:07Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Vetal](https://forum.itvdn.com/letter_avatar_proxy/v4/letter/v/d9b06d/32.png) [@Vetal](https://forum.itvdn.com/u/Vetal)\
**Post date:** [21.02.2019 15:44:07 UTC](https://forum.itvdn.com/t/java-v-chem-raznicza-mezhdu-kanonicheskim-imenem-prostym-imenem-i-imenem-klassa/3248/1 "2019-02-21T15:44:07Z")

</div>

```
obj.getClass().getSimpleName();
obj.getClass().getName();
obj.getClass().getCanonicalName();

```

В чем разница между каноническим именем, простым именем и именем класса ?

---

<div class="post-metadata">

**Author:** ![Pavel92](https://forum.itvdn.com/letter_avatar_proxy/v4/letter/p/85e7bf/32.png) [@Pavel92](https://forum.itvdn.com/u/Pavel92)\
**Post date:** [22.02.2019 15:32:21 UTC](https://forum.itvdn.com/t/java-v-chem-raznicza-mezhdu-kanonicheskim-imenem-prostym-imenem-i-imenem-klassa/3248/3 "2019-02-22T15:32:21Z")

</div>

Для понятия разницы сперва нужно рассмотреть данный пример:

```
//примитивный тип
System.out.println(int.class.getName());
System.out.println(int.class.getCanonicalName());
System.out.println(int.class.getSimpleName());

//класс
System.out.println(String.class.getName());
System.out.println(String.class.getCanonicalName());
System.out.println(String.class.getSimpleName());

//внутренний класс
System.out.println(HashMap.SimpleEntry.class.getName());
System.out.println(HashMap.SimpleEntry.class.getCanonicalName());
System.out.println(HashMap.SimpleEntry.class.getSimpleName());        

//анонимный внутренний класс
System.out.println(new Serializable(){}.getClass().getName());
System.out.println(new Serializable(){}.getClass().getCanonicalName());
System.out.println(new Serializable(){}.getClass().getSimpleName());

```

Результат вывода:

```
int
int
int
java.lang.String
java.lang.String
String
java.util.AbstractMap$SimpleEntry
java.util.AbstractMap.SimpleEntry
SimpleEntry
ClassnameTest$1
null
// вернул пустую строку

```

**имя** - это имя, которое вы бы использовали для динамической загрузки класса.

**каноническое имя** - это имя, которое будет использоваться в операторе импорта и однозначно идентифицирует класс.

**простое имя** слабо идентифицирует класс.

Каноническое и простое имя может быть полезно во время использования toString.
