Приведение примитивных типов данных - PullRequest
0 голосов
/ 16 июля 2011
public class TestEmployee {
    public static void main(String args[]) { 
          byte b=(byte)1*200;
          System.out.println(b);
       }
   }

Я написал простой код выше.Но я получаю следующую ошибку «Возможная потеря точности»

Насколько мне известно, когда мы выполняем целочисленные вычисления, операнды преобразуются в int, а затем выполняются вычисления.И окончательный результат в Int.Теперь, когда диапазон байтового типа данных (от -128 до 127), вышеприведенные вычисления выпадают из диапазона байтов.Так что я опустил его до байта.Тогда почему я получаю ошибку.

Пожалуйста, помогите и исправьте мои концепции кастинга ..

Ответы [ 4 ]

4 голосов
/ 16 июля 2011

Вы приводите 1 к байту, а не результат 1*200. Итак, вы хотите использовать

byte b = (byte)(1*200);

в этом случае.

1 голос
/ 16 июля 2011

ваш код должен выглядеть следующим образом .... просто пропуская скобки перед операцией умножения, иначе только 1 будет понижен, а 200 остается целым числом

public class TestEmployee {
public static void main(String args[]) 
{ byte b=(byte) ( 1 * 200); 
  System.out.println(b);
} 
}
0 голосов
/ 16 июля 2011

Вы не поставили 1 * 200 в скобках.Это должно быть byte b = (byte)(1 * 200).

В противном случае вы делаете byte b = 200, что является целым числом, и вы получаете ошибку.

0 голосов
/ 16 июля 2011

Вы пропускаете скобки () во время удушения.
Измените вот так,

   byte b=(byte)(1*200);

Когда вы пишете так,

   byte b=(byte)1*200;
                 ^
   `compilation error :  possible loss of precision`

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

...