Why do languages like Java distinguish between string and char while others do not?
I wasn't sure whether that distinction was because of historical
  reasons (C only has chars, strings are formed with char* or char[]) or
  if there was an actual purpose for doing it that way. I'm also curious
  if one way has an advantage over another in certain situations.

In C the concept of a "string" is a character array/series of characters that is terminated by a ending character \0. Otherwise a "string" is like any other array in C.
In e.g. C# and several other languages the string is treated as an abstraction, a string is more like an opaque object. The object contains methods that work on the string but exactly how the string is stored is "hidden" to the programmer.
The reason for this is that C is a much older language and more close to hardware than newer languages.
How a string is defined in a language (whether single or dobuble quotes are used) is really just an implementation detail that the person(s) designing the langauge thought to be a good thing at the time.
I've noticed that languages like Java have a char primitive and a string class. Other languages like Python and Ruby just have a string class. Those languages instead use a string of length 1 to represent a character.
I was wondering whether that distinction was because of historical reasons. I understand the language that directly influenced Java has a char type, but no strings. Strings are instead formed using char* or char[].
But I wasn't sure if there was an actual purpose for doing it that way. I'm also curious if one way has an advantage over another in certain situations.
Why do languages like Java distinguish between the char primitive and the string class, while languages like Ruby and Python do not?
Surely there must be some sort of design concern about it, be it convention, efficiency, clarity, ease of implementation, etc. Did the language designer really just pick a character representation out of a hat, so to speak?