How to effectively teach strings and string literal constants?
Perhaps the place to start is with a discussion of variables and making the distinction between a "thing" and a "name for the thing." 

A pretty good place to start that conversation is with the a poem from Through The Looking Glass, the sequel to Lewis Carroll's Alice in Wonderland.


The song's name is called Haddocks' Eyes
The song's name is The Aged Aged Man
The song is called Ways and Means
The song is A-sitting on a Gate


See wikipedia for a discussion and background as well as the poem itself.

In programming we don't normally use the first of these four distinctions, but the others are important. The second is how we think of a variable - a name for a thing. The fourth is the thing itself. The third can be an alias or alternate name for the thing, though that analogy isn't perfect. 

But once the distinction between the name and the thing is made, you have a better chance of winning. But you still need to be clear. 

"foo" is a thing (a String thing)
s = "foo" establishes s as a name for that thing. 

"s" is a different (String) thing. 

But "/the/path/to/the/file" is simultaneously a thing (String) but also a complicated name for another thing (a File). The open method needs a name for the file to be opened. 

Note that much of the above was copied from an essay I wrote in meta.