引用数据类型的大小统一为4个字节,记录的是其引用对象的地址。
目录
分类:
整型
浮点型
类型转换
new一个数组
整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。与此相反,C和C++程序需要针对不同的处理器选择最有效的整型。
Java 语言整型常量的四种表示形式:
十进制整数,如:99, -500, 0
八进制整数,要求以 0 开头,如:015
十六进制数,要求 0x 或 0X 开头,如:0x15
二进制数,要求0b或0B开头,如:0b01110011
Java语言的整型常数默认为int型,声明long型常量可以后加‘ l ’或‘ L ’
long a = 55555555; //编译成功,在int表示的范围内。
long b = 55555555555; //不加L编译错误,已经超过int表示的范围。
//我们修改成long类型的常量即可:
long b = 55555555555L;
浮点型数据类型 |
||
类型 |
占用存储空间 |
表数范围 |
float |
4字节(32位) |
-3.403E38~3.403E38 |
double |
8字节(64位) |
-1.798E308~1.798E308 |
浮点型常量默认类型也是double。
Java浮点类型常量有两种表示形式:
十进制数形式,例如:3.14 314.0 0.314
科学记数法形式,如314e2 314E2 314E-2 (上下不对称)
float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。
浮点类型float,double的数据不适合在不容许舍入误差的金融计算领域。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
//浮点数的比较一
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d); //结果为false
//浮点数的比较二
float d1 = 423432423f;
float d2 = d1+1;
if(d1==d2){
System.out.println("d1==d2"); //输出结果为d1==d2
}else{
System.out.println("d1!=d2");
}
运行以上两个示例,发现比较一的结果是“false”,而比较二的输出结果是“d1==d2”。这是因为由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。 浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。二进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。
java.math包下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。即:不要使用浮点数进行比较 ! 需要比较请使用BigDecimal类。
1. 自动类型转换
条件:
1)数据类型兼容 2)目标类型的取值范围大于源类型的取值范围
三种:
1)整数类型之间,byte自转short/int/long,short/char自转int/long,int自转long
2)整数类型转float类型,byte/short/char/int自转float
3)其他类型转为double,byte/short/char/int/long/float自转double
(参考以下长度)
-------------------------------------------------------------------------------------------------------------------------------------------------
char字符型在内存中占2个字节
-------------------------------------------------------------------------------------------------------------------------------------------------
2. 强制类型转化:
条件:
1)数据类型不兼容 2)目标类型的取值范围小于源类型的取值范围
注意有精度损失
3. 表达式类型自动提升:
例如:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; //此句报错,因为b1、b2被自动提升到int型,需要强制类型转化:byte b3 = (byte)(b1 + b2);
int[] number = new int[len];
静态初始化:
int[] number = new int[] {1,2,3}; 或:int[] number = {1,2,3};