Рубрики
Без рубрики

Приведение типов в Java

Типизация в Java используется для автоматического или явного преобразования переменной одного типа в другую. Узнайте об автобоксах, распаковке и других типах.

Автор оригинала: Pankaj Kumar.

В этом уроке мы обсудим типизацию и ее различные формы на Java. Давайте начнем.

Приведение типов в Java

Проще говоря, приведение типов означает преобразование типа переменной-примитива/ссылки. При типизации мы будем иметь дело с тремя типами сценариев:

  • Примитивные типы
  • Типы объектов
  • Классы-оболочки и примитивы

Следовательно, этот учебник будет разделен на три части:

  • Расширение и сужение
  • Передача вверх и вниз
  • Автобокс и распаковка

Просто для простоты и для того, чтобы различать примеры примитивного и ссылочного типов, мы используем разные термины.

Давайте начнем!

1. Литье расширяющегося и сужающегося типа

Расширение означает, что небольшой тип может быть помещен в более крупный тип без какой-либо потери информации.

Расширение типизации происходит автоматически.

Это означает, что значение байта может быть автоматически приведено к короткому, int, длинному или двойному.

Расширяется слева направо.

логические типы не могут быть применены ни к чему другому. Они всегда истинны или ложны.

Пример:

Давайте рассмотрим другой пример:

Ошибка Литья Типа Оболочки

Как вы можете видеть, автоматическая типизация от широкой к узкой приведет к ошибке во время компиляции.

Для этого нам нужно выполнить явное приведение типов, как:

Узкая типизация Jshell

Это узкая типизация, и ее необходимо выполнять вручную.

2. Восходящая и нисходящая передача

Простыми словами: повышение-это переход из подкласса в суперкласс. Понижение-это переход из суперкласса в подкласс.

Передача происходит автоматически, и нам не нужно ничего делать явно. Понижение, если оно сделано неявно, может привести к ошибке компилятора.

В следующих примерах наше дерево наследования хотело бы:

JournalDev -> Java -> Android

// Base Class
class JD
{
    public void printMe() { System.out.println("JournalDev print method"); }
}
// Inherited class
class Java extends JD
{
    public void printMe() { System.out.println("Java print method"); }
}

// Inherited class
class Android extends Java
{
    public void printMe() { System.out.println("Android print method"); }
}
 
class Main
{
    public static void main(String[] args)
    {
        JD jd = new Java();
        jd.printMe(); //prints Java print method
    }
}

Приведенный выше случай является примером восходящего вещания.

Давайте используем ту же концепцию при понижении и посмотрим, что произойдет:

Android android = new Java();

Это приведет к ошибке во время компиляции. Вместо этого используйте следующее:

Java java = new Android();

Android and = (Android) java;

Допустим, у нас есть такой класс, как:

class JavaEE extends Java
{
    public void printMe() { System.out.println("JavaEE print method"); }
}
 

Сейчас:

Java java = new Android();
JavaEE javaEE = (JavaEE)java; //classcastexception

Для решения таких случаев используйте оператор instanceof перед вводом текста.

Понижение обычно используется, когда мы хотим получить доступ к определенному поведению подтипа.

3. Автобокс и распаковка

Если мы хотим использовать примитивные типы в качестве ссылочных объектов, мы можем использовать их эквивалентные классы-оболочки.

Пример: int имеет целое число и так далее…

Автобокс относится к автоматическому преобразованию примитивного типа в ссылочный тип.

Пример:


ArrayList&ltInteger> arrayList = new ArrayList<>();
arrayList.add(1);

Здесь мы добавили примитивный тип к ссылочному типу, автоматически поместив его в бокс.

Распаковка означает преобразование объекта типа оболочки в соответствующее ему примитивное значение, например преобразование целого числа в int

Для явной распаковки мы можем использовать встроенные методы, такие как intValue (), floatValue() и так далее:

Integer obj = new Integer("123");
      int i = obj.intValue();
      System.out.println(i); //123

На этом заканчивается этот учебник по приведению типов в Java.