It directly updates in the current live source, only the attributes which are given in the file.
It first deletes the resources and then creates it from the file provided.
The file used in apply can be an incomplete spec
The file used in create should be complete
Apply works only on some properties of the resources
Create works on every property of the resources
You can apply a file that changes only an annotation, without specifying any other properties of the resource.
If you will use the same file with a replace command, the command would fail, due to the missing information.
To learn more about the Kubectl Command list, you can pay a visit to Kubernetes Cheat Sheet.
Both are very different approaches. The kubectl create uses imperative Management. In Kubectl create you specify what you want to create, delete or replace.
While the kubectl apply uses Declarative approach. Where we tell the api how our cluster should look like. So your changes will be maintained even if you've applied changes to a live object.