C++ passes by reference, Java and Ruby don’t

I got a lot of comments for the previous article, that was explaining how Ruby passes by value, just like Java does.

I thought that showing a simple example implemented in C++, Java and Ruby will clarify the idea. In the following lines, we will make swap functionality in 3 languages, and demonstrate that neither Java nor Ruby passes by reference.

C++

Output:

Java

Output:

Ruby

Output:

As you can notice, in c++ example, passing by reference, will do the swap successfully.
Java and Ruby both don’t pass by reference, instead they pass a copy of the reference, which is a value finally, and so the swap fails, as swapping the copies doesn’t swap the original passed objects.

Please note also that in Java, primitive types are passed by their values directly and no need for any kind of references copies.The same case applies for Ruby, with immediate types(int, char…).

According to the previous 2 facts, we conclude that neither Java nor Ruby passes by reference, instead, both pass by value.

I think that fact that Ruby MRI is using C means they can’t use references, and so they are using pointers, and that explains why swap fails.

I hope that the idea is clear now.

154 Replies to “C++ passes by reference, Java and Ruby don’t”

  1. ルイヴィトン スーパーコピー「バッグ色は手触りがいいが、触ってみると、週囲の姉妹はこの綺麗、最近ずっと忙しくて、長い時間がかかりました、いい感じ ヴィトン スーパーコピー ルイヴィトンキーケース コピー当店ルイヴィトン 偽物は創業9年以上の老舗です。業界の長い歴史から言えばまだまだですが、創業 9 年以上の実績と信頼のあるお店です。全世界通信販売は6年前から行っております。さらに1年間で約数万件の販売実績があります。ルイヴィトン スーパーコピー 販売専門ショップです!ルイヴィトン コピー ブランドバッグ、財布、アクセサリー、手帳、ベルト、靴、腕時計、ネクタイ、スカーフなどを揃っております、日本国内最高級のルイヴィトン偽物ブランド激安販売! http://www.gginza.com/%E6%99%82%E8%A8%88/%E3%83%AD%E3%83%AC%E3%83%83%E3%82%AF%E3%82%B9/daytona/f2274a6b7009b5d5.html

  2. AC-DC Преобразователи DC-DC Преобразователи Коммутаторы и ключи Драйверы MOSFET и IGBT Драйверы дисплеев Драйверы изоляторов шин данных Драйверы светодиодов Драйверы электродвигателей Интерфейсы CAN Интерфейсы RS-232 Интерфейсы RS-422, RS-485 Интерфейсы прочие Источники опорного напряжения Компараторы Контроллеры интерфейсов Микроконтроллеры Микропроцессорные супервизоры Микропроцессорные схемы Микросхемы SRAM Микросхемы АЦП Микросхемы для бытовой РЭА Микросхемы для импульсных источников питания Микросхемы для обработки видео изображений Микросхемы для телекоммуникации Микросхемы для телефонии Микросхемы зарядных устройств Микросхемы памяти EEPROM Микросхемы памяти EPROM Микросхемы памяти FLASH Микросхемы программируемой логики Микросхемы стандартной логики Микросхемы ЦАП Мультиплексоры Операционные усилители Стабилизаторы напряжения и тока Транзисторные сборки Дарлингтона Усилители инструментальные Усилители низкой частоты Фильтры (микросхемы) Цифровые потенциометры Часы реального времени, таймеры ШИМ-контроллеры Микросхемы прочие Генераторы Дешифраторы Запоминающие устройства Преобразователи сигналов Синтезаторы звуковых мелодий Сумматоры Счетчики УВЧ и УПЧ Усилители прочие Устройства управления источниками питания Формирователи импульсов Контроллеры синхронного выпрямителя (Контроллеры SR) Контроллеры балластов ламп (Контроллеры освещения) Преобразователи электрических величин 89185540950, e-mail:940950@mail.ru

Leave a Reply

Your email address will not be published. Required fields are marked *