"$*" havehas few uses, the other answers cover why.
Here's a neat example of using "$*" to just "print everything" when doing error handling:
error () {
printf '%s\n' "$*"
exit 1
}
This script demonstrates the difference:
% cat foo.sh
#!/usr/bin/env bash
error1 () {
printf '%s\n' "$*"
#exit 1
}
error2 () {
printf '%s\n' "$@"
#exit 1
}
error1 "aa" "bb"
echo "---"
error2 "aa" "bb"
% ./foo.sh
aa bb
---
aa
bb