Java的八大数据类型
数据类型
java一共有八大数据类型,四个整型,两个浮点型,一种用于表示Unicode编码的字符单元的数据类型char和一种用于表示真值的boolean类型。
3.1 整型
类型 | 存储需求 | 取值范围 |
int | 4字节 | -2147483648 ~ 2147483647 |
short | 2字节 | -32768 ~ 32767 |
long | 8字节 | -9223372036854775808 ~ 9223372036854775807 |
byte | 1字节 | -128 ~ 127 |
注意:从java7开始,加上前缀0b或0B就可以写二进制数
注意: long类型的最后面需要加个L或l
3.2 浮点类型
类型 | 存储需求 | 取值范围 |
float | 4字节 | 大约±3.40282347E±38F(有效位数为6 ~ 7位) |
double | 8字节 | 大约±1.79769313486231570E±308(有效位数为15位) |
3.3 char类型
char类型的值可以表示位十六进制值,范围从\u0000到\Uffff,例如\u2122表示注册号(TM)。\u03C0表示希腊字母π。需要注意的是,char类型无视任何位置,只要在文档中,他就会执行。
3.3.1 Unicode和char类型
我们先来解释一下什么叫码点,码点是指与一个编码表中的某个字符对应的代码值。在Unicode标准中码点采用 十六进制,并加上前缀U+,例如U+0041就是拉丁字母A的码点。UTF-16编码采用不同长度的编码单元表示所有的Unicode码点,一开始是16位的char,只有65535个,后来因为超过了预算,然后改成了利用码点分成的17个代码级别来扩展字符。3.3.2 boolean类型
boolean类型有两个值:false和true,用来判定逻辑条件。整形值和布尔值之间不能进行相互转换3.4 变量
double salary;
int vacationDays;
变量名中所有的字符都是有意义的,并且大小敏感。另外,不能使用Java保留字作为变量名,可以在一行中声明多个变量
3.4.1 变量初始化
其中,++和--和-=和+=运算符的示例如下;
public class FirstSample {
public static void main(String[] args) {
int x = 3;
System.out.println(x++); //3
System.out.println(x); //4
System.out.println(x--); //4
System.out.println(x); //3
System.out.println(++x); //4
System.out.println(x); //4
System.out.println(--x); //3
System.out.println(x); //3
x+=5;
System.out.println(x); //8
x-=3;
System.out.println(x); //5
}
}
3.4.2 常量
public static final double ABC = 2.54;
习惯上,常量名使用全大写,公共的常量要加static 和 final防止被改变。
3.5 运算符
在mian方法中的所有指令都将使用严格的浮点运算,如果将一个类标记为sctrctfp,这个类中的所有方法都要使用严格的浮点运算。例如:
public static strictfp void main(String[] args) {}
3.5.1 数学函数与常量
3.5.2 数据类型之间的转换、
A: 案例演示a: int + intb: byte + intB: Java中的默认转换规则取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算C: 画图解释byte+int类型的问题
首先, 我们知道byte在内存中占一个字节, 而一个字节等于8个比特位(二进制位). 1 byte = 8 bit
int在内存里是占四个字节.
3.5.3 强制转换
A: 强制转换问题int m = 10;byte n = 20;n = m + n;B: 强制转换的格式n = (byte) (m + n);C: 强制转换的注意事项如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同
public static void main(String[] args) {
int x = 3, y = 2;
byte b = 4;
x = x + b;
System.out.println("隐式转换:");
System.out.println(x + y); // 9
System.out.println(x); // 7
int m = 127;
byte n = 1;
n = (byte) (m + n); // 注意byte的取值范围为-128~127
System.out.println("强制转换:");
System.out.println(n); // 结果不是128, 而是-128
}
因为127的二进制数值为 01111111 补码还是它本身
1的二进制数为00000001 补码还是它本身
两者相加 得10000000 减一 得 11111111 然后原码得 10000000
因为128在二进制里和0里表示同一个数,所以最后的结果为-128.
3.6 关系和boolean运算符
关系运算符有 == (检测相等)!=(不等)>(大于)<(小于)>=(大于等于)<=(小于等于)还有&&(与)和||(或)运算符。
int k = 9; int j = 8; int s = 9; System.out.println(k == j); //false System.out.println(k == s); //true System.out.println(!(k == s)); //false //&&表示两个都是true才是true //||表示有一个为true才是true System.out.println(k == 9 && j == 9); //false System.out.println(k == 9 || j == 9); //true
然后是三元运算符。就是 a?b c:d 就是判断?的真假,如果为真则返回c,否则返回d,例如
System.out.println((8 > 9) ? 3 : 8); //8
3.7 位运算符
处理整数类型时,可以直接对组成整数值的各个位完成操作。这些运算符为&(and)、|(or)、^(xor)、~(not)
例如,
int g = (127 & 0b1000);
System.out.println(g);
相当于
01111111
+ 00001000
-------------------------
00001000
所以他的输出为8;
另外,还有>> 和 << 运算符可以将二进制的位数移动,例如
System.out.println(128 >> 3);
System.out.println(128 << 3);
相当于 10000000 将1向由移动3位, 变成 00010000,相当于16
10000000 将1向左移动三位,变成 100 00000000,相当于1024
3.8 枚举类型
有时候,变量的取值只在一个有限的集合内。例如:销售的服装或比萨饼只有小、中、大和超大这四种尺寸。当然,可以将这些尺寸分别编码为1、2、3、4或S、M、L、X。但这样存在着一定的隐患。在变量中很可能保存的是个错误的值 ( 如0或m)。
针对这种情况,可以自定义枚举类型。枚举类型包括有限个命名的值。例如
public enum Size {
S,M,L,XL,XXL,XXXL
}
Size s = Size.XXL;
system.out.println(s);
输出结果为XXL。这样的枚举类型比较方便。安全性高。上一篇: php的类型比较