Я не уверен, правильно ли я понял ваш вопрос, но думаю, что у вас здесь проблема:
Если я конвертирую int в double, выполнив следующие действия: int x = 5; double y = x;
Вы не конвертируете из int
в double
. Вы создаете double
из значения int
. Это также означает, что для значения double
выделена память, а исходный int
остается без изменений.
См. Следующий пример:
@Test
void testPrimitive() {
int x = 5;
double y = x;
log.info("x:{}", x);
log.info("y:{}", y);
x += 1;
log.info("x:{}", x);
log.info("y:{}", y);
// This is the way to assign a value double to an int:
// You need to cast so strip the decimal part explicitly!
// This changes the value of int but does not alter bytes or so just drops bytes
x = (int)y;
y += 5;
log.info("x:{}", x);
log.info("y:{}", y);
}
и то, что он распечатывает:
11: 16: 11.368 [основная] ИНФОРМАЦИЯ org.example.type.PrimitiveTest - x: 5 11: 16: 11.373 [основная] ИНФОРМАЦИЯ org.example.type.PrimitiveTest - y: 5.0 11: 16: 11.375 [основная] ИНФОРМАЦИЯ org.example.type.PrimitiveTest - x: 6 11: 16: 11.375 [основная] ИНФОРМАЦИЯ org.example.type.PrimitiveTest - y: 5.0 11: 16: 11.375 [основная] ИНФОРМАЦИЯ org.example.type.PrimitiveTest - x: 5 11: 16: 11.375 [main] INFO org.example.type.PrimitiveTest - y: 10.0
x & y имеют собственные области памяти и вы не изменяете количество их байтов даже при кастинге.