They are almost similar except the fact that git stash pop throws away the (topmost, by default) stash when applying it, whereas git stash apply leaves it within the stash list for possible later use (or you'll then git stash drop it).
This happens unless there are conflicts after git stash pop, during which case it'll not take away the stash, leaving it to behave precisely like git stash apply.
Another way to look at it: git stash pop is git stash apply and git stash drop.