public static void main(String[] args) { char c = '\u0000';
//返回TRUE,说明相等
System.out.println(c == (char) 0); //一个是空字符,一个是空格,查ASCII码表知道的 System.out.println((char) 0);
System.out.println((char) 32);
//疑问1: 为什么打印出的都是空格,但是前后的AB字母字体不一样
System.out.println("a" + String.valueOf((char) 32) + "b");
System.out.println("a" + String.valueOf((char) 0) + "b"); //既然\u0000是空字符,为什么有长度1
System.out.println(String.valueOf((char) 0).length());
System.out.println(String.valueOf((char) 32).length()); }
//返回TRUE,说明相等
System.out.println(c == (char) 0); //一个是空字符,一个是空格,查ASCII码表知道的 System.out.println((char) 0);
System.out.println((char) 32);
//疑问1: 为什么打印出的都是空格,但是前后的AB字母字体不一样
System.out.println("a" + String.valueOf((char) 32) + "b");
System.out.println("a" + String.valueOf((char) 0) + "b"); //既然\u0000是空字符,为什么有长度1
System.out.println(String.valueOf((char) 0).length());
System.out.println(String.valueOf((char) 32).length()); }
Character.MAX_VALUECharacter.MIN_CODE_POINT
Character.MAX_CODE_POINT
"\u0000" "\u0020"
2.空字符也是字符,要占位的,当然是有长度的。而且'\0'和 '\u0000'是char类型的默认值
(char)32是空格字符,即字符串的时候是 " "
我最大的困惑,是既然是空字符,为什么打印出来是个空格?System.out.println("a" + String.valueOf((char) 0) + "b");
System.out.println("B\u0020C");
System.out.printf("S%cC\n",0x0000);
System.out.printf("S%cC\n",0x0020);
BS
B C
SC
S C
System.out.println("a" + String.valueOf((char) 32) + "b");
起了什么变化?
System.out.println("a" + String.valueOf((char) 0) + "b");
System.out.println("a\u0000b");结果一样哦!!1
(char)0本身是个字符,变成字符串有长度是可以理解的,但是(char)0是个非显示字符,所以打印时看不出来的,包括打印到文件也看不出来(如果用二进制的方式打开文件能看到相应的字节码,但是字符本身没有被显示出来)。
10L的代码在winxp上可以的,但是在Win7上不行,也就是说java在win7系统上作了特殊处理,把原来的非显示字符用空格代替显示出来了。
System.out.println(String.valueOf((char)0).length());
System.out.println(String.valueOf((char)0).trim().length()); //trim以后发现不一样了