Laziness changes when work happens; it enables streaming pipelines and infinite sequences.
Many Clojure functions return lazy sequences: they describe a computation, but do not perform all the work immediately. Work happens as you consume the sequence.
This is powerful:
1(take 5 (range)) ;; => (0 1 2 3 4)
Java mental model: laziness is closer to an iterator/stream that executes on demand, but it composes like plain functions.