Java jest językiem dojrzałym. Jest przetestowany. Jest także szybki (w przeciwieństwie do tego co mówi tłum przeciwników Javy). Jest także dość rozwlekła w zapisie. Przechodząc z Javy na Rubiego, oczekuj że twój kod skurczy się znacząco. Możesz także oczekiwać, że mniej czasu zajmie ci tworzenie szybkich prototypów.
Podobieństwa
Tak jak w Javie, w Rubim…
- Pamięć jest zarządzana przez garbage collector.
 - Obiekty są silnie typowane.
 - Występują metody publiczne, prywatne i chronione.
 - Istnieją wbudowane narzędzia dokumentujące (te Rubiego nazywane są RDoc). Dokumentacja wygenerowana przez rdoc bardzo przypomina tą wygenerowaną przez javadoc.
 
Różnice
W przeciwieństwie do Javy, w Rubim…
- Nie musisz kompilować twojego kodu. Po prostu go uruchamiasz.
 - Istnieją inne toolkity GUI. Użytkownicy Rubiego mogą spróbować WxRuby, FXRuby, Ruby-GNOME2, Qt, lub dla przykładu wbudowanego w Rubiego Tk.
 - Używasz słowa kluczowego 
end, które kończy definicję takich rzeczy jak klasy, w przeciwieństwie do oznaczania bloku kodu nawiasami klamrowymi. - Używasz 
requirezamiastimport. - Wszystkie atrybuty/właściwości klas są prywatne. Dostęp do nich istnieje tylko przez metody (akcesory).
 - Nawiasy w wywołaniach metod są zazwyczaj opcjonalne i często pomijane.
 - Wszystko jest obiektem, włączając liczby jak 2 czy 3.14159.
 - Brak statycznej typizacji.
 - Nazwy zmiennych są tylko etykietami. Nie mają one powiązanego z nimi typu.
 - Brak deklaracji typów. Po prostu nadajesz zmiennej nowe nazwy w razie
potrzeby a one po prostu zostaną utworzone (np. 
a = [1,2,3]w przeciwieństwie doint[] a = {1,2,3};). - Brak konieczności rzutowania. Po prostu wywołaj metody. Twoje testy jednostkowe powiedzą tobie nawet przed uruchomieniem kodu, czy zobaczysz wyjątek.
 - Używasz 
foo = Foo.new("hi")zamiastFoo foo = new Foo("hi"). - Konstruktor zawsze nazywa się “initialize” niezależnie od nazwy klasy.
 - Używasz domieszkowania klas (ang. “mixins”) zamiast interfejsów.
 - Preferowany jest YAML wobec XMLa.
 - Istnieje 
nilzamiastnull. ==iequals()są obsługiwane inaczej w Rubim. Używaj==kiedy chcesz sprawdzić równość w Rubim (equals()w Java). Używajequal?()kiedy chcesz wiedzieć czy dwa obiekty są takie same (==w Java).