In Scala, val and lazy val both are used to declare a value. When we declare a val and assign some expression in it, the expression is evaluated and assigned in that place. Whereas, for lazy val, the expression is evaluated and the value is assigned at the time of its first use. Lazy vals are useful when object creation or expression evaluation is costly in terms of CPU and memory and the value may or may not be used based on some condition.