八大基本数据类型
名称 | 占用字节Bytes | 位数bits | 默认值 |
---|---|---|---|
byte | 1字节 | 8 | 0 |
short | 2字节 | 16 | 0 |
int | 4字节 | 32 | 0 |
long | 8字节 | 64 | 0 |
float | 4字节 | 32 | 0.0F |
double | 8字节 | 64 | 0.0 |
boolean | - | 1 | false |
char | 2字节 | 16 | ‘\u0000’ 空字符 |
- 1个字节 = 8bits
自动类型转换
- 规则:由小字节向大字节自动转换
- byte->short(char)->int->long->float->double
int a = 10;
long b = a;
float c = a;
System.out.println(a); // 10
System.out.println(b); // 10
System.out.println(c); // 10.0
由大向小转换则需要强转
float a = 10.0f;
int b = (int) a;
System.out.println(a); // 10.0
System.out.println(b); // 10
封装类
名称 | 封装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
自动拆装箱
-
拆箱
Integer a = 10; int b = a;
-
装箱
int a = 10; Integer b = a;
基本数据类型和封装类的值可以相互传递。
Integer和int的比较
int a = 10;
Integer b = 10;
System.out.println(a == b);//true
- Integer会拆箱,转为int值与int进行比较
Integer和Integer的比较
Integer i1 = 10;
Integer i2 = 10;
System.out.println(i1 == i2); // true
System.out.println(i1.equals(i2)); // true
Integer i3 = new Integer(10);
System.out.println(i1 == i3); // false
System.out.println(i1.equals(i3)); // true
- Integer的值-128<= x<=127时,直接缓存在IntegerCache中,大于这个范围的时候,直接new Integer来创建Integer对象。
Integer i1 = 127;
Integer i2 = 127;
Integer i3 = 128;
System.out.println(i1 == i2); // true
System.out.println(i1 == i3); // false
- 在IntegerCache缓存段时,获取的是同一个对象,所以结果为true;值超过127时则会创建新的对象,两个Integer的引用地址不一样结果为false
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4); // false
System.out.println(i3.equals(i4)); // true
- 所以值超过128应该用equals()进行比较