Ініціалізуйте довго на Java


213

Примітивні типи даних - oracle doc каже, що діапазон роботи longна Java - -9,223,372,036,854,775,808це 9,223,372,036,854,775,807. Але коли я роблю щось подібне у своєму затемненні

long i = 12345678910;

він показує мені The literal 12345678910 of type int is out of rangeпомилку.

Є 2 питання.

1) Як ініціалізувати значення longзі значенням 12345678910?

2) Чи всі цифрові букви за замовчуванням типу int?


А як щодо ініціалізації Лонга?
Вольфганг Фал

1
@WolfgangFahl Ті ж правила щодо Long- завдяки автоматичному боксу ви можете використовувати Long i = 12345678910Lабо використовувати Long i = Long.valueOf(12345678910L)для тих випадків, коли ви не можете використовувати автоматичний бокс.
Доріан Грей

Відповіді:


422
  1. Ви повинні додати L: long i = 12345678910L;.
  2. Так.

BTW: це не повинно бути великим регістром L, але нижній регістр 1багато разів плутають :).


3
На 0x200000000L
всякий

@Victor Long.valueOf (long) повертає Довгий, а не примітивний довгий. Рішення MByD уникає покладатися на автоматичний бокс.
gouessej

@ user149408 Можливо, ти маєш на увазі 0x20000000L?
Плутон

2
@Pluto працював 0x20000000Lби, але все ще може бути представлений int(32-бітним цілим числом), таким чином, він 0x20000000би працював так само добре. 0x200000000Lрозриває цю межу, роблячи Lнеобхідність прориву .
користувач149408

58
  1. Вам потрібно додати Lсимвол до кінця числа, щоб Java розпізнала його як довгий.

    long i = 12345678910L;
  2. Так.

Див. Примітивні типи даних, де написано: "Ціле число буквеного типу має довгий тип, якщо він закінчується буквою L або l; інакше він має тип int."


39

Вам потрібно додати великі регістри Lв кінці так

long i = 12345678910L;

Те саме стосується float з 3.0f

Що має відповісти на обидва ваші запитання


15

Для довгої ініціалізації потрібно додати "L" до кінця.
Це може бути велика або маленька літера.

Усі числові значення за замовчуванням int. Навіть коли ви робите будь-яку операцію byteз будь-яким цілим числом, byteспочатку просувається до, intа потім виконуються будь-які операції.

Спробуйте це

byte a = 1; // declare a byte
a = a*2; //  you will get error here

Ви отримуєте помилку, оскільки 2це за замовчуванням int.
Отже , ви намагаєтеся помножити byteз int. Отже, результат набирається, до intякого не можна присвоїти byte.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.