字节和字节码
-
一个字节八个码
-
十进制和二进制
-
一个int,四个字节
-
因此能表示的最高的位,31个1
ASCII码
- 声明a=1,脑海中出现二进制的画面
- 可以声明16进制,八进制
java的数据类型
- 原生数据类型和引用数据类型(对象)
- byte,字节,范围,-128-127,强行超过会溢出,127+1会变-128,占一个字节
- int存储的最大的存储值21亿
-
long可以存储比int大的多的数字
-
原生数据类型8种,记住
- 能找到类声明的都是引用数据类型
浮点数是小数在计算机的近似小数
- 0.1 + 0.2的结果
- 不能对浮点数进行相等的比较
- 通常解决的方法
double d = doCalculate();
if (Math.abs(d - 2.0) < 0.00001) {
// 浮点数d和0相等
}
如何声明
类型转换和类型提升
- 低精度到高精度,不会有问题,前面填0
- 高精度到低精度,强行丢弃前面的精度,强制转换会损失一定数据
int i = 200;
byte b = (byte) i;
默认除是地板除
public static double divide(int a, int b) {
int result = a / b
return result;
}
- 解决办法,提升到最高精度
public static double divide(int a, int b) {
int result = 1.0 * a / b
return result;
}
- 和整数意义不同的相加
char c = '1'
c = (char) (c + 1);
System.out.println(c);
面试题:数组类型是什么
- 为什么没有看到数组类型但是可以直接用
- 数组类型是一种特殊的类型,由JDK负责创建
- 想象
class int[] {
public int length;
public [1][2][3][4][5] data;
public [](int index) {
return data的第index个元素
}
}
- 不可扩容
基本数据类型对应的装箱类型
- 原声类型到对象,即引用类型,就是自动装开箱的过程
int i = 100;
Integer integer = i;
为什么要有引用数据类型
- 容器类型list,只接受对象
- 布尔值的装箱类型除了true,false还有null
- 提供额外的方法
原生类型和引用类型的坑
Integer i = null;
int a = i;
- 自动拆箱的时候会带来空指针问题
== 和 equals约定
- equals比较两个东西是不是相等,由他们里面的值是不是一样
- jdk的缓存 IntegerCache,导致integer对象的 1==1,-128-127
- integer本身不可变,+1就是重新创建一个新的对象
- == 对于原生是判断值, 对于对象,两个对象的地址是否相等,equals是指对象的值是否相等