数据类型

 分类:

数据类型_第1张图片

引用数据类型的大小统一为4个字节,记录的是其引用对象的地址。


目录

 分类:

 

整型

浮点型

 

类型转换

new一个数组


整型

整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。与此相反,C和C++程序需要针对不同的处理器选择最有效的整型。

数据类型_第2张图片

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

(参考以下长度)

-------------------------------------------------------------------------------------------------------------------------------------------------

数据类型_第3张图片

数据类型_第4张图片

char字符型在内存中占2个字节

-------------------------------------------------------------------------------------------------------------------------------------------------

2. 强制类型转化:

条件:

    1)数据类型不兼容  2)目标类型的取值范围小于源类型的取值范围

注意有精度损失

3. 表达式类型自动提升:

例如:

byte b1 = 3;

byte b2 = 4;

byte b3 = b1 + b2;  //此句报错,因为b1、b2被自动提升到int型,需要强制类型转化:byte b3 = (byte)(b1 + b2);

 

new一个数组

int[] number = new int[len];

静态初始化:

int[] number = new int[] {1,2,3}; 或:int[] number = {1,2,3};

 

你可能感兴趣的:(Java-基础)