Простые переменные в Java и C ++ - PullRequest
5 голосов
/ 04 декабря 2008

Я видел это предложение в некоторых материалах:

"В Java простые типы данных, такие как int и char, работают так же, как в C."

Мне интересно, что на самом деле они отличаются в Java и C ++?

В C ++ простым переменным, таким как примитивы в Java, также назначается адрес памяти, поэтому эти примитивные типы в C ++ также могут иметь указатель. Однако примитивам в Java не назначается адрес памяти, как это делают объекты.

Я прав?

Спасибо!

Ответы [ 5 ]

7 голосов
/ 04 декабря 2008

Почти.

В Java примитивам также назначается память, но это происходит внутри, и вы не можете получить ссылку.

Причиной было обеспечение безопасности при управлении памятью.

0 голосов
/ 08 июля 2012

Правильно.

В Java вы не можете передать ссылку (указатель) на примитивный тип. // На самом деле в Java нет такого понятия, как указатели.

Примитивный тип может передаваться только по значению в Java. Есть способ обойти это, но обычно это не рекомендуется, если ваша ситуация этого не требует. Вы можете использовать класс-оболочку. Когда использовать класс-оболочку и тип примитива

Только объекты передаются по ссылке.

Кроме того, примитивные типы размещаются в стеке, а объекты - в куче.

0 голосов
/ 05 декабря 2008

Для большинства базовых вещей они работают одинаково, но есть тонна различий в деталях.

  • В Java нет числовых типов без знака (кроме символа char, который технически, но не семантически числовой)
  • Примитивные типы Java могут жить только в стеке (как локальные переменные) или внутри объектов в куче, но не непосредственно в куче.
  • Тип char очень отличается - в C он определен как содержащий один байт (байт может иметь или не иметь 8 бит), тогда как в Java он определен как 16-битный.
0 голосов
/ 04 декабря 2008

Существует несколько различий между Java и C ++, когда речь идет о простых типах. Распределение памяти отличается, поскольку Java скрывает понятие явных указателей и ссылок. Вы просто создаете простой тип и назначаете значение. Другое отличие состоит в том, что Java использует стандартизированные следы памяти для каждой простой проверки типа Простые типы Java . С ++, с другой стороны, зависит от платформы, на которой он компилируется. Еще один момент (и я не знаю, если это разница или нет) заключается в том, что присваивание простым типам является потокобезопасным. Я не занимался многопоточным программированием на C ++, поэтому не уверен, стоит ли это учитывать.

0 голосов
/ 04 декабря 2008

Примитивы хранятся в стеке и передаются по значению.

int x = 5;
int y = x;

y++;

// y = 6
// x = 5

Объекты сохраняются в куче и передаются по ссылке.

Object a = new Object();
Object b = a;

b.someAction();

// A and B point to the same object and both have had the 'someAction()' performed

Я понятия не имею, если это то, что вы просите, но мне скучно и я хочу опубликовать что-то

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