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

Мы закончили нашу прошлую статью о примитивный типах на том, что я пообещал Вам рассказать, какие типы можно приводить и как это все делается. Давайте же приступим.

Приведение типов в арифметических выражениях выполняется автоматически.

byte->short->int->long->float->double

Если операнды a и b комбинируются бинарным оператором (ниже мы это обсудим), перед его исполнением оба операнда преобразуются в данные одного типа следующим образом:

  • Если один из операторов имеет тип double, второй также преобразуется в double;
  • Если один из операторов имеет тип float, второй также преобразуется в float;
  • Если один из операторов имеет тип long, второй также преобразуется в long;
  • Если один из операторов имеет тип int, второй также преобразуется в int;

Разрешенные преобразования типов

Сплошные линии показывают преобразование, выполненное без потери информации. Это преобразование выполняется неявно. Преобразования, когда может произойти потеря информации, называются каст (casting). Они показанные штриховыми линиями. Если к типу данных на рисунке нет линий, то такое преобразование невозможно. Преобразования с потерей информации нужно проводить очень внимательно. Так, как можно потерять значительную часть данных и при этом программа может работать правильно.

Для сужения каст необходимо сделать явным. Например: byte b = (byte)128; прикастили инт к байт типу.

Предлагаю сделать несколько примеров.

Код    
  1. public class TypeCasting {
  2.  
  3.     public static void main(String[] args) {
  4.         byte b = 1, b1 = 1 + 2;
  5.  
  6.         final byte B = 1 + 2; //это константа final делает переменную
  7.         //В константой. Об этом мы тоже поговорим
  8.  
  9.         //b = b1 + 1; //ошибка каста. Дело в том, что
  10.         //переменная b1 во время выполнения кода может
  11.         //измениться и выражение перевысит разрешенный размер
  12.         //типа байт
  13.  
  14.         b = (byte)(b1 + 1);
  15.  
  16.         b = B + 1; // работает
  17.  
  18.         /* Так как В - константа, то компилятор просчитал, что
  19.          * выражение не выйдет за диапазон типа байт*/
  20.  
  21.         final int I = 3;
  22.  
  23.         b = I;// раобтает
  24.  
  25.         /*I –константа. Компилятор проверяет и видит, что выражение
  26.             не превышает заданый диапазон
  27.         */
  28.  
  29.         final int I2 = 129;
  30.  
  31.         //b=I2; //Ошибка так как 129 больше чем 127
  32.  
  33.         b = (byte) I2;
  34.  
  35.     }
  36.  
  37. }

 

Вы могли немного не понять данный код, так как я еще не объяснил, что такое компилятор, константы и т.д. Далее по обучению я все расскажу, хотя должен был сделать это раньше. А сейчас я хочу описать, какими правилами должны обладать названия переменных.

  • Имена переменных не могут начинаться с цифры, в именах не могут использоваться как символы арифметических и логических операторов, а также символ ‘#’.
  • Применение символов ‘$’ или ‘_’ приемлемо, включая первую позицию и имя.
  • Переменная примитивного типа, объявленная как член класса (глобальная переменная), по умолчанию задается нулем.
  • Если переменная объявлена как локальная переменная в методе, перед использованием она должна обязательно быть проинициализирована. Так как локальные переменные не изициализируются по умолчанию. Это значит, что Вы не можете объявить локальную переменную и оставить ее без инициализации. То есть вот так: int i;. Если Вы так сделаете в методе, компилятор попросит Вас задать значение по умолчанию в то время, как создав такую переменную как член класса (глобальную) компилятор сам задаст ей значение 0.
  • Область действия и время жизни переменной ограничено блоком {}, в котором она объявлена. Если Вы создали переменную внутри метода (как мы это делали в примерах), то Вы не сможете использовать ее вне метода, так как метод ограничен скобками {}. Глобальную переменную видно во всех блоках.
  • Также запрещено использовать зарезервированные слова java. Весь перечень ключевых слов можно увидеть на картинке ниже.

И так, как в этой статье я затронул выражение бинарный оператор, то предлагаю рассмотреть и операторы в Java. Тем более, что теории не так и много.

Java имеет несколько типов операторов: простое присваивание, арифметическое, унарное, равноправное и реляционное, условное, сравнение типов, побитовое и битовое смещение.

Много умных слов, но очень просто все объяснит вот эта картинка:

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

Код    
  1. public class OperatorsInJava {
  2.  
  3.     public static void main(String[] args) {
  4.         int a = 5;
  5.         int b = 6;
  6.         int sum = a + b;
  7.         int difference = a - b;
  8.         int incorrectDivision = a/b; //будет 0 так, как в типе int отбрасывается дробная часть
  9.         double c = 4;
  10.         double d = 3.5;
  11.         double correctDivision = c/d;
  12.         int multipl = a*b;
  13.        
  14.         int postfisSum = a++;//обратите внимание на эти 2 записи а будет 5 b - 7
  15.         int infixSum = ++b;//такие вопросы Вам будуть часто попадаться на тестах
  16.         //и совбеседованиях
  17.        
  18.         //давайте выведем все это безобразие
  19.         System.out.println("Sum " + sum);
  20.         System.out.println("Difference " + difference);
  21.         System.out.println("Incorrect division " + incorrectDivision);
  22.         System.out.println("Correct division " + correctDivision);
  23.         System.out.println("Multiplication " + multipl);
  24.         System.out.println("Postfix sum " + postfisSum);
  25.         System.out.println("Infix sum " + infixSum);
  26.  
  27.     }
  28.  
  29. }

 

Результат: Sum 11
Difference -1
Incorrect division 0
Correct division 1.1428571428571428
Multiplication 30
Postfix sum 5
Infix sum 7

Хочу обратить Ваше внимание на инфиксную и постфиксную форму записи выражения. Это очень важный момент, которые большинство упускают.

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

Добавить комментарий