Автор оригинала: 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.