Инициализировать длинный в Java

214

Примитивные типы данных - оракул док говорит, что диапазон 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?

aamadmi
источник
А как насчет инициализации Long?
Вольфганг Фаль
1
@WolfgangFahl Те же правила для Long- из-за автобокса , вы можете использовать Long i = 12345678910L, или использовать Long i = Long.valueOf(12345678910L)в тех случаях, когда вы не можете использовать автобокс.
Дориан Грей

Ответы:

423
  1. Вы должны добавить L: long i = 12345678910L;.
  2. Да.

Кстати, это не обязательно должен быть верхний регистр L, но нижний регистр 1часто путают :).

MByD
источник
3
На всякий случай кому-то стало интересно: то же самое касается гекса, например0x200000000L
user149408
@Victor Long.valueOf (long) возвращает Long, а не примитивное long. Решение MByD позволяет не полагаться на автобокс.
gouessej
@ user149408 Возможно, ты имеешь в виду 0x20000000L?
Плутон,
2
@Pluto 0x20000000Lбудет работать, но все еще может быть представлен int(32-разрядное целое число), поэтому 0x20000000будет работать так же хорошо. 0x200000000Lломает эту границу, что делает след Lнеобходимым.
user149408
59
  1. Вам нужно добавить Lсимвол в конец числа, чтобы Java распознала его как длинный.

    long i = 12345678910L;
  2. Да.

См. Примитивные типы данных, в которых говорится: «Целочисленный литерал имеет тип long, если он заканчивается буквой L или l; в противном случае он имеет тип int».

Джек Эдмондс
источник
39

Вам нужно добавить заглавные буквы Lв конце, так

long i = 12345678910L;

То же самое относится и к поплавку с 3.0f

Который должен ответить на оба ваших вопроса

Амир Раминфар
источник
15

Для инициализации long вам нужно добавить "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.

Сурадж Дубей
источник