java的数据类型
整数型(byte、short、int、long)
编程过程中,默认是int类型。long类型的字面值后面需要加上L或l
PS:java底层,byte、short是按照32位计算的。有些运算会自动把short类型转换为int
另外:
浮点数类型
用于表示小数的整数类型。
字面量默认是double。
原理是二进制科学计数法:
由符号位(sign,正负),指数(exponent,2的N次幂),尾数(mantissa,二进制的小数点后的部分)组成,二进制表示形式是:sign* mantissa* 2exponent。
小数十进制与二进制的转换
- 二进制转换成十进制:跟整数转换一个原理,例如二进制11.11转换为十进制 121+120+12-1+12-2=3.75。
- 十进制转换成二进制:整数部分不用说了。小数部分采用乘2取整的方式,比如3.75整数部分对应的二进制是11。小数部分0.75,先乘以2等于1.5,取1.5的整数部分1。再用0.5(上次乘2的结果的小数部分)乘以2等于1.0,取1.0的整数部分1,现在已经没有小数部分了,终止。0.75对应的二进制就是.11。
Question
:为什么int、float都是4个字节,short还能表示小数,但范围比int大,精度(即能精确表达的位数,超过就被截肢了)又比int低呢?
参考:https://blog.csdn.net/c2681595858/article/details/84865920
https://www.cnblogs.com/LittleTiger/p/3969562.html
比较浮点数时a0.1是不合适的,应该a-0.10。
字符类型char
是一个16位(2个字节)无符号整数,这个数值是一个字符的unicode编码值。
char的范围(0-2^16-1=65535)不能表示全部unicode。
当控制台显示"?"时,代表在本操作系统中找不到该数字对应的字库(操作系统中最多存2万多的汉字)。
控制台显示的小方框代表字符不可见。
'a'-'A'='b'-'B' 而且小写的比大写的统一码大。
制表符
转行(linux里)
回车换行(window系统里)
boolean类型
两个值,不初始化时,默认是false。
补充
对于数值类型的基本类型的取值范围,等都已经以常量的形式定义在对应的包装类中了。如:
基本类型byte 二进制位数:Byte.SIZE最小值:Byte.MIN_VALUE
最大值:Byte.MAX_VALUE
基本类型short二进制位数:Short.SIZE最小值:Short.MIN_VALUE
最大值:Short.MAX_VALUE
基本类型char二进制位数:Character.SIZE最小值:Character.MIN_VALUE
最大值:Character.MAX_VALUE
基本类型double 二进制位数:Double.SIZE最小值:Double.MIN_VALUE
最大值:Double.MAX_VALUE
注意:float、double两种类型的最小值与Float.MIN_VALUE、 Double.MIN_VALUE的值并不相同,实际上Float.MIN_VALUE和Double.MIN_VALUE分别指的是 float和double类型所能表示的最小正数
。也就是说存在这样一种情况,0到±Float.MIN_VALUE之间的值float类型无法表示,0 到±Double.MIN_VALUE之间的值double类型无法表示。这并没有什么好奇怪的,因为这些范围内的数值超出了它们的精度范围。
Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。
PS:Java基本类型存储在栈中,因此它们的存取速度要快于存储在堆中的对应包装类的实例对象。从Java5.0(1.5)开始,JAVA虚拟机(Java Virtual Machine)可以完成基本类型和它们对应包装类之间的自动转换。所有基本类型(包括void)的包装类都使用了final修饰,因此我们无法继承它们扩展新的类,也无法重写它们的任何方法。
基本类型的优势:数据存储相对简单,运算效率比较高。
实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void
,不过我们无法直接对它们进行操作。