از نظر مفهومی Unit و void یکی هستند و می خواهند بگویند که تابع مقداری بر نمی گرداند و فقط باید آن را بخاطر side effect که ایجاد می کند فراخوانی کرد.
من خودم تا بحال دو تفاوت دیده ام:
1- کامپایلر Scala می تواند هر نوعی را به Unit تبدیل کند و این در مواردی بدرد می خورد که ما یک procedure نوشته ایم ولی نه از علامت مساوی استفاده کرده ایم و نه نوع بازگشتی procedure را مشخص کرده ایم:
def f(): Unit = "this String gets lost"
def g() { "this String gets lost too" }
در هر دو مثال بالا با توجه به اینکه نوع بازگشتی تابع String است ولی کامپایلر نوع String به Unit تبدیل می کند. تا جایی که من می دونم void این قابلیت را ندارد.
2- عبارت () یک مقدار Unit تولید می کند در حالی که در جاوا برای void مقداری وجود ندارد.