Short answer
Static factories can have descriptive names (Optional.of vs Optional.empty), can return a cached or subtype instance instead of always allocating, and can hide the implementation type behind an interface — none of which a constructor can do.
Explanation
Examples are Integer.valueOf, List.of, and Optional.of. The trade-off is that a class with only private constructors and static factories cannot be subclassed, and the factory methods are harder to discover than 'new' in IDE autocomplete.
Common mistakes
- Saying static factories are only for singletons.
- Ignoring that classes with only private constructors cannot be subclassed.