You are skipping a step in your mental compilation. If you write this:
The Java compiler changes the Unicode literal into it's character equivalent (all Java files are assumed to be Unicode):
Now this is setting the integral char to a value of 0x01 (or \u0001 if you want to stick with Unicode). If you print out b, you will be printing out a "Start of Heading" character (smiley face).
The above line is not the same thing as the following line:
The first example, x, is using a character literal to set the integral char to a value of 0x31 (or \u0031). The second example is using a Unicode literal to do the same.
Now if you print out x or y, you will print out "1". The lesson here is that char values aren't really "characters", they are integral values which are interpreted as "characters" in the correct context. Perhaps a gander at the
Unicode Character Table is in order?