2016-12-28 6 views
1

Я читал по блогам за неизменность примитивных типов. Они говорят, что целые числа неизменны. Означает ли это, что целочисленная переменная получает новую ячейку памяти при каждом присваивании новых значений?Неизменяемые целые числа

I.e.

int32 Val= 34; 
Val =38; 

Теперь оба значения будут храниться в разных местах памяти или одинаково?

+2

Здесь вы задали четыре довольно разных вопроса - и 2, 3 и 4 не имеют ничего общего с неизменностью. Они имеют все, что связано с 'string', являющимся ссылочным типом, и' int' является типом значения. Это поможет, если вы зададите один * очень специфический * вопрос. (Ваш первый вопрос, вероятно, наиболее близок к вашему названию, но на самом деле не совсем понятно, что вы спрашиваете. Если бы вы могли показать какой-то код, было бы намного легче помочь вам.) –

+0

Эти вопросы были застряли после прочтения разных статей. Любое руководство для них будет полезно. Спасибо заранее – OmiH

+3

Нет, я не буду отвечать на этот вопрос, потому что он слишком широк. Вопросы переполнения стека должны быть * конкретными * и * индивидуальными *. Задавать четыре широких вопроса в одном посте - это не очень хорошая идея. –

ответ

3

Означает ли это, что целочисленная переменная получает новое место памяти при каждом присваивании новых значений?

Имейте в виду, что целые числа являются «типы значений» - это означает, что переменная, что они хранятся в магазинах значение , а затем ссылку на какой-то ячейку памяти. Так что, когда вы делаете:

int32 Val= 34; 
Val =38; 

новое значениехранится в Val - так что есть только одна «ячейка памяти» участвует и значениев этом месте будет перезаписан.

Теперь оба значения будут храниться в разных местах памяти или одинаково?

Ну, в этом смысле «ценность» 34 не хранится где-нибудь больше. Означает ли это, что число 34 сейчас 38 где-нибудь, что используется 34? Ни в коем случае! Все, что вы сделали, это хранить разные значения в Val.

Представьте, что у вас есть клочок бумаги, на котором вы написали «Val» наверху (просто чтобы дать ему имя). Затем вы пишете «34». Сколько у вас ценностей? Сколько обрезков бумаги?

Теперь вы вычеркиваете (или вычеркиваете) «34» и пишите «38». Сколько у вас значений? Сколько обрезков бумаги?

С ссылочных типами аналогия может работать, как хорошо, но «значение» на бумаге является ссылкой на другую бумажку. Если вы измените значение на бумаге, другой лом не волшебным образом исчезнет. Это работа уборщика (сборщика мусора), чтобы посмотреть на все обрывки бумаги, лежащую вокруг, посмотреть, ссылается ли на нее другой клочок бумаги, и выбросить ее, если нет ссылок.

Смежные вопросы