因为ASCII码为3的并不是黑色心形符号,而是“End of Text”特殊字符。引用Wikipedia的表格:
ASCII这些小于32的ASCII字符都是“控制字符”,原本编码上并没有规定对应的图像(glyph)。
值为3的ASCII字符确实有一种图像解读方式是:
ASCII code 03 = ETX ( End of Text, hearts card suit )
( HTML entity = ♥ )
但这只是某些平台上某些字体对控制字符的解读而已,并不是ASCII编码的本意。
况且Java里,
(char) 3
本意并不是“值为3的一个ASCII字符”,而是“值为U+0003的一个UTF-16 code point”。碰巧这个code point正好跟ASCII码的意思一样而已。
Unicode里表示扑克牌的黑色心形符号的字符是U+2665,也就是题主代码里后一种情况。