In computational terms you can think of this as using caching.
The variable with a good names allows you to retrieve the meaning of the statement a lot faster then if you have to mentally parse it yourself.
Example::
val
More names means more domain information
We find that when we emphasize how objects communicate, rather than what they are, we end up with types and roles defined more in terms of the domain than of the implementation. This might be because we have a greater number of smaller abstractions, which gets us further away from the underlying language. Somehow we seem to get more domain vocabulary into the code.
if(match.find()) {
String key = match.group(1);
String value = match.group(2);
headers.put(key.toLowerCase(), value);
}