Автор оригинала: 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<Integer> arrayList = new ArrayList<>(); arrayList.add(1);
Здесь мы добавили примитивный тип к ссылочному типу, автоматически поместив его в бокс.
Распаковка означает преобразование объекта типа оболочки в соответствующее ему примитивное значение, например преобразование целого числа в int
Для явной распаковки мы можем использовать встроенные методы, такие как intValue (), floatValue() и так далее:
Integer obj = new Integer("123"); int i = obj.intValue(); System.out.println(i); //123
На этом заканчивается этот учебник по приведению типов в Java.