Size: a a a

2020 November 03

n.

ns ... in learn.java
Мне вот одно не понятно в примитивах.
Зачем на конце числа необходимо ставить букву L для long, f для float
например: long max = 3123456789L
Разве тип числа не обозначается записью long ?
А если буква L обозначает, что это число типа long,
то зачем вообще нужна запись типа в начале, long?
источник

IS

Ivan Sacura in learn.java
ns ...
Мне вот одно не понятно в примитивах.
Зачем на конце числа необходимо ставить букву L для long, f для float
например: long max = 3123456789L
Разве тип числа не обозначается записью long ?
А если буква L обозначает, что это число типа long,
то зачем вообще нужна запись типа в начале, long?
да тип лонг
источник

IS

Ivan Sacura in learn.java
я так понял
источник

DC

Denis Chikanov in learn.java
ns ...
Мне вот одно не понятно в примитивах.
Зачем на конце числа необходимо ставить букву L для long, f для float
например: long max = 3123456789L
Разве тип числа не обозначается записью long ?
А если буква L обозначает, что это число типа long,
то зачем вообще нужна запись типа в начале, long?
Есть тип переменной, а есть тип значения (литерала), которое переменной присваивается.
Тип целочисленного литерала, если значение меньше Integer.MAX_VALUE - int, а присвоить int значение long-переменной нельзя.
источник

n.

ns ... in learn.java
Denis Chikanov
Есть тип переменной, а есть тип значения (литерала), которое переменной присваивается.
Тип целочисленного литерала, если значение меньше Integer.MAX_VALUE - int, а присвоить int значение long-переменной нельзя.
А для чего нам необходимы типы переменных тогда?
Мне вот не совсем понятно.
Мы ведь оперируем типами литералов получается...
То есть, хотелось бы узнать как эта грань, в различиях определения (тип переменной vs тип литерала) на практике может встретиться..
источник

n.

ns ... in learn.java
К примеру, что нам мешает выразиться так:
max = 3123456789L
Нам же достаточно было бы сказать так (создаем переменную max с типом литерала long)
источник

DC

Denis Chikanov in learn.java
ns ...
К примеру, что нам мешает выразиться так:
max = 3123456789L
Нам же достаточно было бы сказать так (создаем переменную max с типом литерала long)
Для этого в джаве появилось ключевое слово var для автовывода типа, но это не всегда правильно. Для примитивов - да, так, но для сложных типов - далеко не всегда.
источник

n.

ns ... in learn.java
Denis Chikanov
Для этого в джаве появилось ключевое слово var для автовывода типа, но это не всегда правильно. Для примитивов - да, так, но для сложных типов - далеко не всегда.
ясно. значит потом с получением бОльших знании, узнаю подробнее.
Спс.
источник

..

... ... in learn.java
ns ...
Мне вот одно не понятно в примитивах.
Зачем на конце числа необходимо ставить букву L для long, f для float
например: long max = 3123456789L
Разве тип числа не обозначается записью long ?
А если буква L обозначает, что это число типа long,
то зачем вообще нужна запись типа в начале, long?
потому что по умолчанию - вещественное число - литерал типа double. его можно присвоить переменной типа double, но не float. Чтобы сделать литерал типа float надо добавить суффикс f. Еще по умолчанию целочисленное число - литерал типа int, его не можно присвоить переменной типа long. Нужно явно указать, что это литерал типа long суффиксом L.
источник

..

... ... in learn.java
источник

n.

ns ... in learn.java
что-то здесь запутано.
long l=435 - Компилятор понимает сперва как int, но видит что тип переменной long, и поэтому преобразует число в long.
Ок, тут вопросов нет.
long l = 9 999 999 999 - Компилятор понимает как int, но число больше чем int и возникает ошибка компиляции.
Вопрос: А что, во втором примере, у компилятора пропадает возможность определять, то что тип переменной на самом деле является типом long, и соответсвенно преобразовывать число автоматически, как он это сделал в первом примере?
источник

..

... ... in learn.java
ns ...
что-то здесь запутано.
long l=435 - Компилятор понимает сперва как int, но видит что тип переменной long, и поэтому преобразует число в long.
Ок, тут вопросов нет.
long l = 9 999 999 999 - Компилятор понимает как int, но число больше чем int и возникает ошибка компиляции.
Вопрос: А что, во втором примере, у компилятора пропадает возможность определять, то что тип переменной на самом деле является типом long, и соответсвенно преобразовывать число автоматически, как он это сделал в первом примере?
это недопустимый литерал типа int
источник

..

... ... in learn.java
литерал типа int можно присвоить переменной long
источник

..

... ... in learn.java
но получается, что если литерал слишком большой для int, то нужно юзать литерал типа Long
источник

I

Ilia in learn.java
вопрос у человека в том, что доработать компилятор в теории можно
источник

n.

ns ... in learn.java
... ...
но получается, что если литерал слишком большой для int, то нужно юзать литерал типа Long
выходит автоматически ничего не преобразуется.
Просто у компилятора есть возможность в переменную типа long впихать литерал, типа int
источник

..

... ... in learn.java
ns ...
выходит автоматически ничего не преобразуется.
Просто у компилятора есть возможность в переменную типа long впихать литерал, типа int
преобразовать int в long
источник

n.

ns ... in learn.java
Denis Chikanov
Для этого в джаве появилось ключевое слово var для автовывода типа, но это не всегда правильно. Для примитивов - да, так, но для сложных типов - далеко не всегда.
Мне вот этот ответ больше симпатизирует.
Использование переменной var - для автоопределения, мне кажется более логичным.
Но я еще не дошел в своем изучении до переменной var
источник

AY

Andrew Yablokov in learn.java
ns ...
выходит автоматически ничего не преобразуется.
Просто у компилятора есть возможность в переменную типа long впихать литерал, типа int
почитайте если интересно как это всё работает спецификацию
https://docs.oracle.com/javase/specs/jls/se11/html/jls-5.html#jls-5.1.2
источник

n.

ns ... in learn.java
Andrew Yablokov
почитайте если интересно как это всё работает спецификацию
https://docs.oracle.com/javase/specs/jls/se11/html/jls-5.html#jls-5.1.2
ок, благодарю.
источник