基础数据类型与包装类型
byte | short | int | long | float | double | char | boolean | |
---|---|---|---|---|---|---|---|---|
位数 | 8 | 16 | 32 | 64 | 32 | 64 | 16 | 1 |
字节数 | 1 | 2 | 4 | 8 | 4 | 8 | 2 | 1(1/8) |
默认值 | 0 | 0 | 0 | 0L | 0.0f | 0.0d | ‘/u0000’(null) | false |
包装类型 | Byte | Short | Integer | Long | Double | Character | Boolean |
为了满足Java语言面向对象的这一特性,上述基本数据类型中的每一个在java.lang包中都有一个包装类。
- 所有包装类都可以将与之对应的基本数据类型作为参数来创建它们的实例对象
- 除了Character类之外,其他包装类都可以将一个字符串作为参数来构造它们的实例
- Boolean类的构造方法参数为String类型时,若该字符串为true(不论大小写),则该对象表示true,否则表示false
- 当包装类Number构造方法的参数为String类型时,字符串不能为null,并且该字符串必须能够解析为基本类型的数据
拆箱与装箱
- 需要知道什么时候会引发装箱和拆箱
- 装箱操作会创建对象,频繁的装箱操作会消耗许多内存,影响性能,所以可以避免装箱的时候应该尽量避免。
- equals(Object o) 因为原equals方法中的参数类型是封装类型,所传入的参数类型(a)是原始数据类型,所以会自动对其装箱,反之,会对其进行拆箱
- 当两种不同类型用==比较时,包装器类的需要拆箱, 当同种类型用==比较时,会自动拆箱或者装箱
int与Integer的区别与联系
int | Integer | |
---|---|---|
数据类型 | 基本数据类型 | 包装类 |
初始化 | 默认初始化为0 | 默认未初始化(null),必须实例化后才能使用 |
地址内容 | 直接存储的值 | 对象的引用地址 |
相等值的比较 | Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(自动拆箱过程); | 1. 两个通过new生成的Integer变量永远是不相等的; 1. 非new生成的Integer变量和new Integer()生成的变量比较时,结果为false; 1. 非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,否则比较结果为false; |
(因为 ①当变量值在-128~127之间时,非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同;②当变量值在-128~127之间时,非new生成Integer变量时,java API中最终会按照new Integer(i)进行处理,最终两个Interger的地址同样是不相同的)。
|
byte、short、int、char的区别与联系
在java中,涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果
byte x = 4;
byte y = x + 5; // error
byte y = (byte)(x + 5); // ok
y += 6;// ok
short、char同理
byte 存储空间1个字节,取值范围 -128~127 short 存储空间2个字节,取值范围 -2~2-1 int 存储空间4个字节,取值范围 -2~2-1 long 存储空间8个字节,取值范围 -2~2-1 其默认值均为0 Java采用unicode进行编码,char类型在内存中占2个字节,即16位,取值范围 0~2-1(0-65535)
小数的比较
不能直接或者用equals()方式比较:
System.out.println((3*0.1) == 0.3); //false
System.out.println(Double.valueOf(3*0.1).equals(Double.valueOf(0.3))); // false
正确比较方法
- 转为String
- 使用sun提供的Double.doubleToLongBits()方法
- 使用BigDecimal.compareTo()方法
BigInteger和BigDecimal类
Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算,BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDecimal 加入了小数的概念
基本运算方法
- 加法 add()
- 减法 subtract()
- 乘法 multiply()
- 除法 divide()
- 除法取余 divideAndRemainder()
- 绝对值 abs()
除法运算
非空判断、非零判断 、BigDecimal.ZERO