1.什么是装箱?什么是拆箱?

学习地址

装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型

装箱

JavaSE5以前定义变量必须写成

Integer x = new Integer(6);

以后就可以直接赋值

Integer x = 6;

这就是装箱,感觉跟spring的自动装配是一样得。

拆箱
int n=x;

看完上面那两句话可能了解概念了,做一道题

我这个地方他爆红了,我idea好像引入过阿里的编码规范,他提示我这里是包装类,需要使用equals来判断是否相等。当然程序是可以运行的。试着想一下,做错了可以看上面引入的学习地址链接

答案是
true
false

Integer的范围是[-128,127],超过了就会new新的对象

学费了
  Integer i1 = 40;
  Integer i2 = 40;
  Integer i3 = 0;
  Integer i4 = new Integer(40);
  Integer i5 = new Integer(40);
  Integer i6 = new Integer(0);

  System.out.println("i1=i2   " + (i1 == i2));
  System.out.println("i1=i2+i3   " + (i1 == i2 + i3));
  System.out.println("i1=i4   " + (i1 == i4));
  System.out.println("i4=i5   " + (i4 == i5));
  System.out.println("i4=i5+i6   " + (i4 == i5 + i6));   
  System.out.println("40=i5+i6   " + (40 == i5 + i6));     
i1=i2   true
i1=i2+i3   true
i1=i4   false
i4=i5   false
i4=i5+i6   true
40=i5+i6   true

语句 i4 == i5 + i6,因为+这个操作符不适用于 Integer 对象,首先 i5 和 i6 进行自动拆箱操作,进行数值相加,即 i4 == 40。然后 Integer 对象无法与数值进行直接比较,所以 i4 自动拆箱转为 int 值 40,最终这条语句转为 40 == 40 进行数值比较。

2.重载和重写的区别

  • 重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理

  • 重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法

重载:

发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同。

重写:

重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写。

3.深拷贝 vs 浅拷贝

  • 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。

  • 深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。