Java 是一种 强类型 语言,要求变量的使用严格规定,所有变量的使用都必须先定义
3.1 基本类型(8)
基本类型分为:数值类型:整型、浮点型、字符型;布尔型
- 整型
- byte (1个字节)
- short (2个字节)
- int (4个字节)
- long (8个字节)
- 浮点型
- float (4个字节)
- double (8个字节)
- 字符型
- char (2个字节)
- 布尔型
- boolean:true/false (1位)
基本类型的包装类:
Byte、Short、Integer、Long、Float、Double、Character、Boolean
3.2 引用类型
- 类
- 接口
- 数组
3.3 常见面试题
3.3.1 自动拆箱和装箱
装箱:将基本数据类型转换为对应的引用类型;调用 valueOf() 方法
拆箱:将引用类型转换为对应的基本数据类型;调用 xxxValue() 方法
相关博文:https://www.cnblogs.com/dolphin0520/p/3780005.html
例子:
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1 == i2);// true
System.out.println(i3 == i4);// false
解析:
Integer.valueOf(); 方法 会根据数值判断,[-128,127] 之间会查找相同值得引用地址,否则new 一个新的对象
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
=========================================================================================================
Double d1 = 100.0;
Double d2 = 100.0;
Double d3 = 200.0;
Double d4 = 200.0;
System.out.println(d1 == d2);// false
System.out.println(d3 == d4);// false
解析:
double.valueOf 是直接创建新对象
public static Double valueOf(double d) {
return new Double(d);
}
=========================================================================================================
布尔值:定义了两个静态变量;此会在初始化加载的时候就加载完。
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
因此:
整数型 Byte、Short、Integer、Long、Character 、Boolean都是同类模式;常量池技术
- Byte、Short、Integer、Long 缓存数据:[-128, 127]
- Character : [0, 127]
- Boolean : [True Flase]
- ==》 以上超出对应的范围即会创建新的对象。
浮点型 Double 、Float 直接new.
- 因为浮点数没有固定范围大小的数值
Integer i = new Integer(***); 和 Integer i = *; 的区别
- 第一种不会触发自动装箱;第二种会
- 某种程度上来说,第二种的执行效率要高于第一种;
- 因为自动装箱的时候:会判断区间值,如在区间种则无需new.
进制
-
整数进制首位
- 二进制:0b
- 八进制:0
- 十进制:
- 十六进制:0x
-
浮点数
- float:有限、离散、舍入、大约、接近但不等于
- 最好完全不要使用浮点数进行比较
- 银行业务、金钱业务:使用 BigDecimal 数学工具类
-
字符型
- 所有的字符本身还是数字
-
转义字符
- 制表符
- 换行
- ...
-
布尔型
- if(flag==true){} 与 if(flag) 是一样的
3.4 类型转换
-
强制转换:(类型)变量名 ; 由高到低
int i = 10; byte a = (byte) i;
-
自行转换:由低到高
-
运算过程中不同类型的数据需转换为同一类型
-
注意事项:
- 不能对布尔类型进行转换
- 高容量转换为低容量时需强制转换
- 强制转换存在内存溢出的问题
- 不能把对象类型转换为不相干的类型