Java面经

!! 般的牛客网面经,自己增强下记忆,以后学习过程中自己再补充。

Int 和Integer的区别

  • Integer 是int的包装类,int是基本的数据类型。
  • new Integer 时,会为这个对象分配指针,所以两次new Integer不相等。
  • java5 之后引入了自动拆箱、装箱机制。
    class AutoUnboxingTest {
       public static void main(String[] args) {
           Integer a = new Integer(3);
           Integer b = 3;                  // 将3自动装箱成Integer类型
           int c = 3;
           System.out.println(a == b);     // false 两个引用没有引用同一对象
           System.out.println(a == c);     // true a自动拆箱成int类型再和c比较
       }
    }
    

为什么java泛型要使用引用类型而不是基本数据类型

  • Java中所有的引用类型都是继承自Object类型,而基本数据类型不是,在设计泛型的时候,泛型也是继承自Object类型。
  • 选择将T作为Ojbect而存在还有一种原因就是Java的兼容性问题,由于Java5之前数组都是以Object声明的,由于数组类型没法强制转换,如果选用Object作为泛型擦除后的类型,就可以避免对集合类库较大的改动,同时也保持了兼容性。但这样也使得java中的泛型不是真正的泛型,而是作为语法糖而存在的
    public class Main<T> {
        Object[] obj = new Object[10];
        public T add (T t) {
            obj[0] = t;
            return (T)obj[0];
        }
    
        public static void main(String[] args) {
            Main<Integer> mai = new Main();  //除了这里需要声明为Integer,其它都工作正常
            int i =  mai.add(1);
            System.out.println(i);
        }
    }
    

String 和StringBuffer的区别

  • String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。
  • 这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

基本类型

  • java 中有8种基本数据类型
  • 字符类型:byte、char
  • 基本整型:short、int、long
  • 浮点型:float、double
  • 布尔类型 :boolean

String 是基本类型么

  • 不是,String是final类,不可以修改。
  • 操作数量较少的字符串用String,不可修改的字符串。
  • 在单线程且操作大量字符串用StringBuilder,速度快,但线程不安全,可修改。
  • 在多线程且操作大量字符串用StringButter,线程安全,可修改。
  • String 和 StringBuffer和StringBuilder区别: String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuffer 和StringBuilder区别是StringBuffer是线程安全的。

Array 和ArrayList的区别

  • Array可以包含基本类型和引用类型,ArrayList只可以包含引用类型。
  • Array大小是固定的,ArrayList是动态变化的。
  • ArrayList 有更多的方法和特性。
  • 对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

值传递和引用传递

  • 值传递是基本数据类型的,传递的是该变量的一个副本,改变副本不影响变量值,而引用传递是对象传递,会改变其原始对象。
    在这里插入图片描述

说明符号“==”比较的是什么

  • 如果两边为对象,则为内存引用的比较,指向同一个引用对象时,返回True,否则返回false;
  • “==”如果两边是基本类型,就是比较数值是否相等

HashCode

  • java 中的hashcode是根据一定的规则将与对象相关的信息映射成一个数值,称为散列值。包括HashSet、HashMap、HashTable等,对每一个存储的元素都有唯一对应的块编号,表示存储地址。调用contains方法,定位到元素地址。

float,double 浮点类型的数据为何不精确,银行业务用什么表示。

  • float等计算机存储数据时,使用的是二进制数据的存储,只能逼近,无法准确表示,计算机采用科学技术法表示数据。(IEEE 754),使用BigDecimal来做精确运算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值