1.Почему над char можно выполнять арифметические операции? - Тут только все статьи говорят,что можно, а почему можно не понятно
2.Что такое pool строк и pool примитивов? - Тут я нашел информацию что вроде строки сами при создании без ключевого слова new добавляются в pool, но примитивные типы вроде туда не как не засунуть. А все что удалось нагуглить это лишь то, что целочисленные оберточные типы так же как строки добавляются в pool,
3. Как добавлять строку в pool? - Она сама добавляется в pool если создаем без new или есть еще какие либо способы?
Павел Бережной
6 уровень
Вопросы по Java Core
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
wan-derer.ru
13 декабря 2022, 13:36
1. Потому что char - внезапно числовой тип :) Целое беззнаковое 2-байтное число, которое по совместительству адресует символ уникода.
2, 3. Ты никак не можешь повлиять на пулы, это внутренняя кухня Java, так что забей. Единственное что тебе надо знать - что сравнение объектов (String, Integer и пр.) через "==" приводит к непредсказуемым результатам. Всегда сравнивай через myObj.equals(anotherObj), а лучше через Objects.equals(myObj, anotherObj) - тогда всё будет корректно.
0
Денис Enterprise Java Developer
14 декабря 2022, 12:32
Почему же непредсказуемым? Все вполне предсказуемо. Сравнение через == сравнивает ссылки, и вернет true только если обе переменных ссылаются на один и тот же объект (ссылки равны). Во всех остальных случаях это будет false. Ну и очевидно, что идентичность сложных объектов может определяться иначе, для чего и используется метод equals.
0
wan-derer.ru
15 декабря 2022, 11:19
Не очень понятно что на практике может дать сравнение ссылок, особенно в контексте пулов срок и др. объектов.
+1
Justinian Judge в Mega City One Master
18 декабря 2022, 07:42
По 2 и 3 мы можем влиять и на пул оберток путем расширения верхней границы создаваемого кеша и на пул строк естественно при помощи интернирования строк.
Но по поводу == и иквалс да, правило простое - примитивы мы сравниваем через ==, объекты через equals
0
Roma Chernesh
12 декабря 2022, 21:37
Спробую відповісти на перше питання (якщо помиляюсь, то прошу мене виправити).
char має арифметичні операції, бо це прийшло в Java з мови С.
Там більша "свобода" у типізації даних, тому і виходить так, що із змінною char можно поводитися як із цифровими зміними.
Англомовний гугл говорить, що цю власитивість використовують у шифруванні та при роботі із рядками, де треба автоматично змінювати символи. Більш конкретно може хтось інший доповнить.
+1
Justinian Judge в Mega City One Master
18 декабря 2022, 07:45
char под капотом целочисленный тип, это просто число в памяти, беззнаковые два байта (0..65535), и поэтому язык позволяет делать с ним арифметические операции, поскольку иногда используются всякие сдвиги и алгоритмы, все-таки таблица символов это таблица, поэтому да, шифрование тоже один из примеров.
+2
Roma Chernesh
19 декабря 2022, 14:21
Взагалі, в Java всі примітивні типи (окрім boolean) по суті зберігають у собі числа.
Тому тип char тут навіть не виключення. Можно було відповісти "бо так працює мова", але хотілося дати трішки більше поясненень :)
0
Justinian Judge в Mega City One Master
20 декабря 2022, 05:47
булеан теж зберігає у собі число, одиничку чи нулик, але на рівні синтаксису нам не дозволять зробити true / 2 * false, та в цілому твій комент це пряма відповідь на питання автору, бо char могли "залочити" і заборонити робити з ним арифметичні операції, але цього не зробили за причиною озвученою тобою
+1