1# AutoValue 2 3*Generated immutable value classes for Java 7+* <br /> 4***Kevin Bourrillion, Éamonn McManus*** <br /> 5**Google, Inc.** 6 7**Value classes** are extremely common in Java projects. These are classes for 8which you want to treat any two instances with suitably equal field values as 9interchangeable. That's right: we're talking about those classes where you wind 10up implementing `equals`, `hashCode` and `toString` in a bloated, repetitive, 11formulaic yet error-prone fashion. 12 13Writing these methods the first time is not too bad, with the aid of a few 14helper methods and IDE templates. But once written they continue to burden 15reviewers, editors and future readers. Their wide expanses of boilerplate 16sharply decrease the signal-to-noise ratio of your code... and they love to 17harbor hard-to-spot bugs. 18 19AutoValue provides an easier way to create immutable value classes, with a lot 20less code and less room for error, while **not restricting your freedom** to 21code almost any aspect of your class exactly the way you want it. 22 23For more information, consult the 24[detailed documentation](userguide/index.md). 25 26**Note:** If you are using Kotlin then its 27[data classes](https://kotlinlang.org/docs/data-classes.html) are usually more 28appropriate than AutoValue. Likewise, if you are using a version of Java that 29has [records](https://docs.oracle.com/en/java/javase/16/language/records.html), 30then those are usually more appropriate. You can still use 31[AutoBuilder](userguide/autobuilder.md) 32to make builders for data classes or records. 33