Преобразование типов в Java также вызывает преобразование в байтах памяти? - PullRequest
2 голосов
/ 11 июля 2020

Если я конвертирую int в double таким образом:

int x = 5; 
double y = x;

Я знаю, что y будет иметь значение 5.0, но когда x переменная установлен в переменную double y, которая преобразуется автоматическим преобразованием типа c в Java, количество байтов в памяти также конвертируется косвенно автоматически с помощью Java для нас?

int составляет 4 байта, а double - 8 байтов, поэтому в этом случае значение, поступающее из переменной x при установке значения для переменной y, будет косвенно преобразовано в байты памяти в зависимости от языка? Я предполагаю, что это преобразование памяти было бы таким же, если бы я выполнял приведение или использовал какой-то метод для преобразования типов данных вместо автоматического c преобразования типов?

1 Ответ

2 голосов
/ 11 июля 2020

Я не уверен, правильно ли я понял ваш вопрос, но думаю, что у вас здесь проблема:

Если я конвертирую 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 имеют собственные области памяти и вы не изменяете количество их байтов даже при кастинге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...