Java基础八股吟唱 01_day

Java基础八股吟唱 01_day

  • 八种基本数据类型的大小,以及他们的包装类

    • int是基本数据类型,Integer是int包装类,是引用类型。int的默认值是0,而Integer默认值是null,所以Integer能区分出0和null的情况。一个对象变量的值为null表示改变变量没有引用任何对象,使用未进行引用赋值的对象变量是一件很危险的事情,很容易跑出罪恶的空指针异常

    • 基本数据类型在声明时,系统会自动给它分配空间,而引用类型声明时,只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值。数组对象也是对象,所以某些时候不要进行直接赋值哦,除非你有这需求

    • Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个boolean元素占8位。这样我们可以得出boolean类型单独使用是4个字节,在数组中又是1个字

      节。使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的

      是32/64位系统,而是指CPU硬件层面),具有高效存取的特点

  • instanceof 关键字的作用

    • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为某一个类的实例或者其父类的实例
    • 编译器会检查 被检测对象 是否能转换成instanceof右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定
  • 自动装箱与拆箱

    • 概念

      • 装箱就是自动将基本数据类型转换为包装器类型(int-->Integer);调用方法:Integer

        valueOf(int) 方法

      • 拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int);调用方法:Integer

        intValue方法

    • 缓冲池

      • 面试题

        java
        复制代码
        public class Main { public static void main(String[] args) { 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() 方法,因此多个 Integer 实例使用自动装箱来创建并且值相同,那么就会引用相同的对象。Integer缓冲池的大小默认为-128~127。很明显200超出了这个范围

        java
        复制代码
        public class Main { public static void main(String[] args) { Double i1 = 100.0; Double i2 = 100.0; Double i3 = 200.0; Double i4 = 200.0; System.out.println(i1==i2); // false System.out.println(i3==i4); // false } }

        很显然嘛,这个没有所谓的缓冲池,为什么呢?原因: 在某个范围内的整型数值的个数是有限的,而浮点数却不是

      • 基本类型对应的缓冲池

        • boolean —— true、false
        • byte —— 其能表示的值都是
        • short、int —— -128~127
        • char —— \u0000 ~ \u007F
  • 重载和重写的区别

    • 重写**(Override)**
      • 发生在父类与子类之间
      • 方法名,参数列表必须相同,返回值类型可以是父类中该方法返回值类型的子类
      • 访问修饰符要大于等于父类中定义的访问权限
      • 重写的方法不能抛出新的检查型异常或者比被重写方法更加宽泛的检查型异常
    • 重载(Overload
      • 发生在同一个类中
      • 方法名相同,参数个数、顺序、类型其中一个或多个不同
      • 与返回值无关
  • equals与**==**的区别

    • ==

      • 基本类型比较的是值是否相等
      • 引用类型比较的是其引用地址是否相等,即两个对象是否相同,或者说两个对象变量是否引用同一对象
      • 两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过
    • equals

      • equals用来判断两个对象的状态是否一致,即两个对象的字段值是否相等(当字段值是引用时,应该调用其对应对象的equals方法)
      • 所有的类如果不明确的声明所继承的类,那么都会继承Object基类,Object基类中的定义的equals方法使用的是“==”,所以我们需要进行equals判断的时候,必须重写equals方法
    • "=="为true,equals一定为true(相同必相等),equals为true,“==”不一定为true(相等不一定相同)

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP