Difference between Java and Groovy

Java as well as Groovy code run on the Java Runtime environment. Groovy code is compiled to the Java byte-code. Groovy was primarily written with the objective to easy the code writing compared to Java but still run on the JRE.

  • Groovy language along with the Grails Framework revolutionized simple and easy application building on the JRE.
  • Groovy and Grails were created inspired by Ruby On Rails.
  • Groovy supports object oriented programming, meta-programming and functional programming.
  • Groovy supports many interesting concepts such as traits which support multiple inheritance without the diamond problem.
  • Curry is another interesting feature supported by Groovy to create a modified version of closure (used in other languages) by providing default values to some of the closure parameters

Java Groovy
Groovy code does not compile within a Java project All valid Java code works in Groovy as well
Only java.lang package is imported by default Lot of Standard Java packages such as java.lang, java.io, java.net, java.util are imported into groovy code by default
Method to be executed is determined at compile time Method to be executed is determined at runtime
Braces { and } are used for Array initialization Square brackets [ and ] are used for Array initialization
Not specifiying a scope will result in default scope being considered Not specifying a scope will result in private scope being considered
Java 8 supports lambdas and method references Groovy supports closures
Spring boot provides convention-by-configuration for Java language Grails provides convention-by-configuration for Groovy language
Spring ORM provides support for Hibernate for Java language Grails GORM provides support for Hibernate for Groovy language
Java Strings are created with double quotes Groovy Strings are created with single or double quotes
Java Strings do not support templating by default Groovy GStrings provide templating ability by default
Java not suitable for scripting Since Groovy has a lot of defaults like no need of class name, no need of imports for some of java packages, simple declarations of maps and arrays, it is suitable for scripting
Java does not autowrap primitive unless actually needed. Java prefers widening of primitive data type over autoboxing. For example, int is preferably converted to long over converting to Integer Groovy autowraps all primitives by default. int is converted to Integer by default
For Java objects, == checks only for identity and does not check for equality For Groovy objects,== checks for comparison if the object supports Comparable interface and checks for equality otherwise
In Java, we have to use Object class to refer to anything In Groovy, def keyword can be used
Java does not have easy support for meta-programming compared to Groovy language Groovy supports meta-programming with ease