本篇文章涉及到Java Section 1中内容的补充、拓展,先阅读Java Section 1后再行查看更为适宜。
链接:https://blog.csdn.net/m0_49332783/article/details/107303812
数据的二进制、八进制、十六进制表示法:Java可以在数字前面加上“0b”和“0B”表示二进制数字,如0B1001便是9的二进制表示,类似地,在数字前加“0x”或“0X”表示十六进制,如0x20表示十六进制的32,在数字前加“0”表示八进制,如010表示八进制的8,不过八进制表示法极易混淆,建议不使用。
字面值表示拓展:可以为Java数字字面量加上“_”增加易读性,编译时会自动忽略下划线,如1_000_000表示100万。
不同平台数据的内存占用情况:如果你学过C语言、C++,你应该知道,int和long等类型的内存占用与目标平台相关,具体表现为:在8086这样的16位处理器上整型数值占2字节,在32位处理器上整型为4字节;类似地,long在32位机上占4字节,在64位机上占8字节。这些差别给程序的跨平台带来了许多难度,不过在Java中所有类型数据的内存占用与平台无关。
无符号数据:Java没有任何无符号(unsigned)形式的int、long、short或byte类型。
浮点数的十六进制表示法:Java允许使用十六进制表示浮点数,如0.125 = 2-3可以表示成0x1.0p-3,其中使用p表示指数(不是e),位数采用十六进制,指数采用十进制,指数基数为2,浮点数遵循IEEE 754规范,尾数转换详见此规范,此处不再详细描述。
特殊的浮点数值:正无穷大(Double.POSITIVE_INFINITY)、负无穷大(Double.NEGETIVE_INFINITY)、NaN(不是一个数字,Double.NaN),实际使用中极少用到,判断一个特定值是不是NaN,不能使用if (x == Double.NaN)//never true
,而应该使用isNaN方法:if (Double.isNaN(x))
转义序列:char类型的值是用单引号括起来的内容,如‘A’
是编码值65对应的字符常量,这意味着char类型的值可以表示为十六进制的值,根据Unicode编码(不了解可自行查找),\u0000~\uffff
可以表示字符,如\u03C0
表示希腊字符π,也就是,char a = 'π'
与char a = '\u03C0'
等价。又比如public static void main(String\u005B\u005D args)
完全正确,因为\u005B
和\u005D
就是'['
和']'
的编码。此外还有一些特殊的转义字符,如下表所示。Unicode转义序列会在解析代码之前得到处理,例如,"\u0022+\u0022"
并非是一个字符串\u0022+\u0022
,\u0022
在解析之前会先转换为"
,这样原表达式就是""+""
即两个空字符串连接,结果仍是空字符串。更隐秘地,注意注释中的转义符号,代码// \u00A0 is a newline
//C:\users
,均会报错,前者的\u00A0
会被替换成一个换行符,后者\u
后面并非十六进制字符,会产生语法错误,正确写法//C:\\users
。
转义序列 | 名称 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\" | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\\ | 反斜杠 | \u005e |