7初级 - Java的数据类型

200 阅读2分钟

字节和字节码

  • 一个字节八个码

  • 十进制和二进制 1.png

  • 一个int,四个字节 2.png

  • 因此能表示的最高的位,31个1 3.png

ASCII码

  • 声明a=1,脑海中出现二进制的画面

4.png

  • 可以声明16进制,八进制

java的数据类型

  • 原生数据类型和引用数据类型(对象)
    • byte,字节,范围,-128-127,强行超过会溢出,127+1会变-128,占一个字节
    • int存储的最大的存储值21亿

5.png

  • long可以存储比int大的多的数字

  • 原生数据类型8种,记住

6.png

  • 能找到类声明的都是引用数据类型

7.png

浮点数是小数在计算机的近似小数

  • 0.1 + 0.2的结果
  • 不能对浮点数进行相等的比较
  • 通常解决的方法
double d = doCalculate();
if (Math.abs(d - 2.0) < 0.00001) {
  // 浮点数d和0相等
} 

如何声明

8.png

类型转换和类型提升

  • 低精度到高精度,不会有问题,前面填0

9.png

  • 高精度到低精度,强行丢弃前面的精度,强制转换会损失一定数据
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负责创建

10.png

11.png

  • 想象
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
  • 提供额外的方法

12.png

原生类型和引用类型的坑

Integer i = null;
int a = i;
  • 自动拆箱的时候会带来空指针问题

== 和 equals约定

13.png

  • equals比较两个东西是不是相等,由他们里面的值是不是一样
  • jdk的缓存 IntegerCache,导致integer对象的 1==1,-128-127
  • integer本身不可变,+1就是重新创建一个新的对象
  • == 对于原生是判断值, 对于对象,两个对象的地址是否相等,equals是指对象的值是否相等