Similarities
Standard values and default values work very similarly, in that the both store values which are used on all derived items that do not specify their own values for those fields. So the value of many items are all controlled in a single place. Change it in that one place and the items all update. You can prevent updates to individual items by entering a different value for that item.
Differences
The difference is that the standard values are stored in a __Standard Values item and the default values are set on the field definition item. Also standard values override default values. When you create a new __Standard Values item, any fields with a default value will be pre-populated on the standard values item. And updating the default value will update the value on the standard values item. This is true unless you modify that field on the standard values item, then it will no longer update with the default value. Also, you can have multiple standard values, if you derive template B from template A, both can have standard values, but only the place where the field is defined can specify default values.
Example
Given a template with the following fields d, s, ds.

- You set the default value of d and ds to "default" and do not set the default value of s.
Create the standard values item and notice that d="default", s="", ds="default". The default values pre-populated in the __Standard Values item
Now create two new items from this Foo template (foo and foo2) and notice that d="default", s="", ds="default" for both items.
Don't change any fields on foo, but on foo2, change all 3 fields to "custom"
Now on the __Standard Values item, set s and ds to "standard" and leave d unchanged.
Notice that the content item foo should now be d="default" s="standard" and ds="standard". However foo2 values are all still set to "custom"
Now go back to the d and ds field definition items under your template and set the d and ds default values both to "default2"
Go back to the __Standard Values item and notice that d="default2" while ds="standard". By setting ds="standard" earlier, you unlinked it from the default value, but d is still linked, so changes to the default value will reflect in the standard values item.
Now go to the foo and foo2 content items. foo should be d="default2", s="standard" and ds="standard". foo2 should be d="custom", s="custom", and ds="custom". Notice how default values can pass all the way through to content items if they are not overridden in the standard values or on the content items themselves.
Long story short, the standard values update to match the default values for all fields that are unchanged. The content items update to match the standard values for all fields that are unchanged.