JAVA基本数据类型

193 阅读4分钟

数据类型

image.png 图有6个实线箭头,表示无信息丢失的转换;另外有3个虚线箭头,表示可能有精度损失的转换。

例如,123 456 789是一个大整数,它所包含的位数比float类型所能够表示的位数多。当将这个整数转换为float类型时,将会得到正确的大小,但是会损失一些精度。

int n=123456789;
float f=n;//f is 1.23456792E8
基本类型 类型 存储需求 后缀表示 取值范围 备注
整型 int 4字节 -2147483648~2147483647(刚刚超过20亿)
short 2字节 -32768~32767
long 8字节 l或者L -9223372036854775808~9223372036854775807
byte 1字节 -128~127
浮点型 float 4字节 f或者F 大约 ±3.40282347E+38F(有效位数为6~7位)
double 8字节 d或者D 大约±1.79769313486231570E+308(有效位数为15位)
字符型 char 2字节 0~65535 描述了UTF-16编码中的一个代码单元。
强烈建议不要在程序中使用char类型。
boolean型 boolean 1字节 true/false

思维扩展

main方法必须是public吗?

一开始main方法并不要求必须是public的。

有个程序员报告了这个bug。Sun公司的工程师回复说:Java虚拟机规范并没有强制要求main方法一定是public的,并且“修复这个bug可能带来其他隐患”。

但从Java1.4开始,强制main方法必须是public的。

浮点数计算注意事项?

浮点数值不适用于无法接受舍入误差的金融计算。

例如,命令System.out.println(2.8-1.1)将打印出0.899999999999,而不是人们期望的0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。这就好像十进制无法精确地表示分数1/3一样。如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类。

Unicode

Unicode

char类型遇到的问题

Java采用Unicode进行编码,char类型在内存中占2个字节-16位,其值的范围在0-65535(U+0000 ~ U+FFFF)之间。20 世纪 80 年代开始启动设计 Unicode 编码时,人们认为两个字节(16 位)的代码宽度足以对世界上各种语言的所有字符进行编码,并有足够空间留给未来的扩展。所以在设计 Java 时决定采用 16 位的 Unicode 字符集。目前Unicode编码范围在0-1114111(U+0000 ~ U+10FFFF)之间,显然一个char类型已经不能够存65535以外的字符了。

char如何表示Unicode中65535以后的字符?

blog.csdn.net/nimasike/ar…

Unicode和char类型

如下转义序列,可以出现在加引号的字符字面量或字符串中,如'\u2122'和"hello\n"。此外,转义序列\u还可以出现在加引号的字符常量或字符串之外,public static void main(String\u005B\u005D args)

转义序列名称Unicode值
\b退格\u0008
\t制表\u0009
\n换行\u000a
\r回车\u000d
"双引号\u0022
'单引号\u0027
\反斜杠\u005c

Unicode转义序列会在解析代码之前得到处理。

例如

  • "\u0822+\u8022"并不是一个由引号(U+0022)包围加号构成的字符串。实际上,\u0822会在解析之前转换为",这会得到""+"",也就是一个空串。

  • 注释当中的\u。

    // \u000A is a newLine
    

    会产生一个语法错误。因为读程序时,\u000A会替换为一个换行符。

    // look inside c:\users
    

    也会产生一个语法错误,因为\u后面没有跟着4个16进制数。

基本数据类型(包装类型)的参数传递