Вопрос по primitive, java – Правильный образ мышления о примитивном назначении

3

В этом примере

int x = 5;
int y = x;
x = 4;

у останется 5, потому что х просто переназначается и не манипулирует объектом, на который он ссылался в любом случае. Мой вопрос: правильно ли я сказал, что я только что сказал? Или есть дублирование памяти, хранящейся в «х», и это дублирование помещается в «у».

данные, хранящиеся в x, копируются в y Breavyn

Ваш Ответ

3   ответа
1

Таким образом, в любой момент времени вы создаете примитивную переменную, блок памяти (такого примитивного типа) резервируется для значения, независимо от того, назначено ли вам значение для этого или нет.

(на любом языке низкого уровня вы можете рассматривать переменную как регистр)

2

x а такжеy. x а такжеy здесь примитивы не объекты.

Когда вы делаете

int y = x;

Отдельная память для переменной inty создается и значениеx т.е.5 копируется в это место.

после этого, если вы переназначаете любое другое значение переменнойx при выполнении :

x = 4;

, это не отражается на стоимостиy.

Даже если вы используете класс WrapperInteger он будет вести себя аналогичным образом, поскольку это неизменные классы. например:

Integer x = new Integer(5);
Integer Y = x; //now both `x` and `y` point to the same `integer` object with the value 5.
x= new Integer(4); // now since `x` is pointing to a different object than `y`, both `x` and `y` remain independent(i.e change in one does not reflect in another).   
8

в отличие от объектов, хранятся непосредственно внутри переменной. То есть переменная типа примитива не хранит ссылку на примитив, она хранит значение примитива напрямую.

Когда одна примитивная переменная присваивается другой примитивной переменной, она копирует значение.

Когда вы делаете

int x = 5; int y = x; x = 4;

x устанавливает значение внутри него на 4, иy по-прежнему имеет значение 5, потому что его значение является отдельным.

Единственный способ изменения одной переменной путем изменения другой переменной - это если обе переменные являются ссылками на изменяемый объект, а объект мутирован - так как они оба смотрят на один и тот же объект, а не на свои собственные копии они оба наблюдают одно и то же изменение. (Обратите внимание, например, что строки, будучи неизменяемыми, никогда не «внезапно изменятся», но массивы и коллекции могут)

Вы говорите, что «x» хранит значение примитивов напрямую, но на самом деле «x» также не просто тип ссылки? «х» ничего не может хранить, это просто письмо. Он должен ссылаться на пространство в памяти, как ссылки на типы объектов, единственное отличие состоит в том, что переназначения будут вносить изменения в память, к которой он обращается, вместо изменения того, к какому пространству памяти он относится. Я прав? Dan Webster
Не забывай этоx не требуется выделять место в памяти - оно может существовать только в регистре или может быть оптимизировано в процессе компиляции. Кроме того, в Java нет метапеременных, то есть вы не можете иметь переменную, которую вы можете сказать «сделать эту точку переменной»x - не то, чтоx указывает на,x сама по себе », поэтому уровень переменной - это самый низкий уровень перенаправления, который вы можете иметь. Вы правы, но не так, как можете использовать в качестве программиста на Java. Patashu

Похожие вопросы