一、简单类型及其封装器类
- bit就是位,也叫比特位,是计算机表示数据最小的单位
- byte就是字节,1byte=8bit ,0001 1100,一般用两个16进制来显示如:1c
Java基本类型共有八种,基本类型可以分为三类,字符类型char
,布尔类型boolean
以及数值类型byte
、short
、int
、long
、float
、double
。
JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。8 中类型表示范围如下:
byte
:8位,最大存储数据量是255,存放的数据范围是-128~127之间。short
:16位,最大数据存储量是65536,数据范围是-32768~32767之间。int
:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。long
:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。float
:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。double
:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。boolean
:只有true和false两个取值。char
:16位,存储Unicode码,用单引号赋值。
简单类型 | boolean | byte | char | short | Int | long | float | double | void |
---|---|---|---|---|---|---|---|---|---|
二进制位数 | 1 | 8 | 16 | 16 | 32 | 64 | 32 | 64 | – |
封装器类 | Boolean | Byte | Character | Short | Integer | Long | Float | Double | Void |
二、自动类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级。例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
1.自动类型转换
从小的类型转为高的类型,byte转int,long,float,double
byte a = 0;
int b = a;
long c = a;
float d = a;
double e = a;
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
stem.out.println("e="+e);
输出
b=0
c=0
d=0.0
e=0.0
2.整数类型可以自动转化为浮点类型,可能会产生舍入误差
@Test
public void test10() {
float A = 2 + 10f;
float B = A - 11.9f;
System.out.println(B);
}
输出
0.10000038
精准度和准确度是有差距的,float精准度的准确姓流失
三、强制转换
强制转换类型,在要强制转换类型的前面加上括号,然后再括号里面加上你要转换的类型。
1.转换过程中可能导致溢出
int i =128;
byte b = (byte) i ;
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
2.有些数据经过转换运算后,精度就丢失了
@Test
public void test11() {
int x;
double y;
x = (int) 55.55 + (int) 22.22;
y = (double) x + (double) 1.1 + 1.1;
System.out.println("x=" + x);
System.out.println("y=" + y);
}
输出
x=77
y=79.19999999999999
浮点数转换整数是通过舍弃小数得到的,而不是四舍五入
四、String和数值类型互转
1.String 转数值类型
@Test
public void test12() {
int a1 = Integer.parseInt("1");
byte a2 = Byte.parseByte("1");
long a3 = Long.parseLong("123456");
float a4 = Float.parseFloat("1.23456");
double a5 = Double.parseDouble("1.2345678");
System.out.println("a1=" + a1);
System.out.println("a2=" + a2);
System.out.println("a3=" + a3);
System.out.println("a4=" + a4);
System.out.println("a5=" + a5);
}
输出
a1=1
a2=1
a3=123456
a4=1.23456
a5=1.2345678
还可以设置进制,如String类型是一个16进制的数值,可以这样转换
@Test
public void test12() {
int a1 = Integer.parseInt("a",16);
int a2 = Integer.parseInt("10",16);
System.out.println("a1=" + a1);
System.out.println("a2=" + a2);
}
输出
a1=10
a2=16
第二个参数是指按什么进制识别,十六进制的"a"就是十进制的10,十六进制的"10"就是十进制的16。
2.数值类型转String
@Test
public void test12() {
int i = 12345;
String s = "";
s = i + "";
//or
s = String.valueOf(i);
}