План уровня:
Что еще можно посмотреть на досуге:
Расширение и сужение типов в Java
Модификатор final
Маленькие хитрости в Java
http://study-java.ru/uroki-java/urok-7-preobrazovanie-tipov-v-java/#chartoint
Почитать про преобразование типов
Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!
Вернуться к плану обучения
Вернуться к обучению java онлайн на JavaRush
- Приведение примитивных типов: расширение и сужение.
- Примитивные типы
- Преобразование типов. Расширение и сужение типов
- Особенности преобразования типов
- instanceof
- Литералы

Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!
Вернуться к плану обучения
Вернуться к обучению java онлайн на JavaRush
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
pr0java.blogspot.com/2015/12/java.html
Т.е. 2*10(в 9) это 2_000_000, int же = 2147483647 (см. Integer.MAX_VALUE); тоже и с long.
Если я не прав — поправьте кто-нибудь, пожалуйста!
результат будет -6.
Каким образом 250 преобразовалось в -6?
Почему так? Ведь при наследовании дочерний класс получает поля и методы родительского + определяет свои. Разве дочерний класс не шире родительского? Следуя этой логике – всё должно быть наоборот: присваивание родительского объекта дочернему является расширением, а дочернего родительскому — сужение. Где я не так понял?
Вспомним зоологию — родительский класс — Млекопитающие. Это животные, которые вскармливают детенышей молоком и покрыто шерстью (кто-то в большей степени, кто-то в меньшей). Дочерним классом к нему являются Хищники. Добавляются методы: «Питаются мясом», «Охотятся». С одной стороны Хищники расширяют Млекопитающих этими методами, но с другой стороны — это более узкая группа по отношению к Млекопитающим.
Исправьте что-ли.
old.intuit.ru/department/pl/javapl/7/3.html
оно же
www.intuit.ru/studies/courses/16/16/lecture/484?page=3
Меня смутило в главе 7 о приведении типов подпункт о присвоении значений в следующей части:
«Например, примитивные значения нельзя присваивать объектным переменным, включая следующие примеры:…
// приведение к классу-»обертке"
// также запрещено
Long a=5L;"
В Java 7 данный пример отработал нормально. Или я что-то не понял.
А версия Java 5.0 с автоупаковкой и автораспаковкой вышла только через год, так что та лекция уже устарела
Но в целом материал подан хорошо и большинство вещей вполне себе фундаментальные.
Просто теперь буду чаще перепроверять и ставить под сомнение.
Но ведь можно сделать приведение одной из переменных к float. Выглядеть будет лучше на мой взгляд:
Код нормально работает. Что не так?
Floating-Point Literals
A floating-point literal is of type float if it ends with the letter F or f; otherwise its type is double and it can optionally end with the letter D or d.
The floating point types (float and double) can also be expressed using E or e (for scientific notation), F or f (32-bit float literal) and D or d (64-bit double literal; this is the default and by convention is omitted).
Primitive Data Types
Результат:
В книжке Джошуа Блоха 2002 `Java. Эффективное программирование` есть статья посвященная этой теме «31 Если требуются точные ответы, избегайте использования типов float и double». Вот кусок:
Про модификатор final тоже очень интересно — если он присутствует в исходном коде, то при изменении этого значения придется все зависимые классы перекомпилить, иначе останется старое значение.
10^127 vs. 10^18
Спасибо
Судя по спецификации, его тут быть не должно
docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2
stackoverflow.com/questions/8710619/java-operator
int cost = super.getCost();
if (getNumber() > DISCOUNT_NUMBER) {
cost *= (1 — percentDiscount / 100);
}
return cost;
}
percentDiscount — double
кто-нибудь может пояснить, почему так работает и почему это лучше, чем явное приведение?
Скорее всего в его реализации прописано что-то такое:
то есть в реализации приводят второй оператор к типу первого.
A compound assignment operator has the following syntax:
and the following semantics:
но я уже нагуглил эту тему — оказывается и 2 байта для char уже устарело и юникод требует 4 байта.
как дальше жить?..
Символы в Java заключаются в одинарные кавычки (например, 'a'). Операции, допустимые для символов:
присвоение;
сравнение;
объединение в строки.»
Но как с ними можно производить арифметические действия?? Объясните пожалуйста.
Грубо говоря, представь просто, что за каждым символом скрывается свой номер, который ты просто не видишь. Когда ты сравниваешь char'ы, сравниваются их номера.
Почитай про Unicode.
Например разница между строчным и прописным символом = 32.
Выдаёт 1.0? Понятно, что это число выходит за значения byte, но почему 1.0 ?!
257 в двоичной системе это 100000001. Тип int в Java это 32 бита или 4 байта. В памяти компьютера число 257 будет храниться как
00000000 00000000 00000001 00000001. При сужении этого значения до типа byte три старших байта будет откинута и мы получим 00000001. Далее к этому значению прибавляем 0 типа int (четыре нулевых байта) и получаем 1 типа int(нули в трех старших байтах, в младшем байте везде нули кроме 1 в самом младшем бите). При присвоении результата переменной d происходит расширение типа ind до double. Вот и получается, что d будет хранить еденичку типа double.